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
0ea54899
Commit
0ea54899
authored
Aug 01, 2013
by
Sven Franck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
linting
parent
a6188c92
Changes
32
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
2087 additions
and
1850 deletions
+2087
-1850
js/main.js
js/main.js
+75
-73
modules/core/app/app.js
modules/core/app/app.js
+349
-341
modules/core/config/config.js
modules/core/config/config.js
+43
-32
modules/core/extensions/extensions.js
modules/core/extensions/extensions.js
+199
-183
modules/core/overrides/overrides.js
modules/core/overrides/overrides.js
+2
-0
modules/core/storage/storage.js
modules/core/storage/storage.js
+713
-691
modules/core/utilities/utilities.js
modules/core/utilities/utilities.js
+15
-13
modules/ui/address/address.js
modules/ui/address/address.js
+16
-12
modules/ui/basket/basket.js
modules/ui/basket/basket.js
+16
-10
modules/ui/confirm/confirm.js
modules/ui/confirm/confirm.js
+15
-10
modules/ui/details/details.js
modules/ui/details/details.js
+55
-42
modules/ui/footer/footer.js
modules/ui/footer/footer.js
+14
-10
modules/ui/gallery/gallery.js
modules/ui/gallery/gallery.js
+83
-60
modules/ui/header/header.js
modules/ui/header/header.js
+13
-18
modules/ui/index/index.js
modules/ui/index/index.js
+13
-9
modules/ui/item/item.js
modules/ui/item/item.js
+79
-72
modules/ui/items/items.js
modules/ui/items/items.js
+64
-45
modules/ui/login/login.js
modules/ui/login/login.js
+16
-12
modules/ui/media/media.js
modules/ui/media/media.js
+14
-10
modules/ui/pagination/pagination.js
modules/ui/pagination/pagination.js
+80
-43
modules/ui/payment/payment.js
modules/ui/payment/payment.js
+14
-10
modules/ui/products/products.js
modules/ui/products/products.js
+14
-10
modules/ui/refine/refine.js
modules/ui/refine/refine.js
+14
-10
modules/ui/register/register.js
modules/ui/register/register.js
+14
-10
modules/ui/searchbar/searchbar.js
modules/ui/searchbar/searchbar.js
+40
-33
modules/ui/seo/seo.js
modules/ui/seo/seo.js
+14
-10
modules/ui/shipment/shipment.js
modules/ui/shipment/shipment.js
+14
-10
modules/ui/sorting/sorting.js
modules/ui/sorting/sorting.js
+14
-10
modules/ui/summary/summary.js
modules/ui/summary/summary.js
+14
-10
modules/ui/teaser/teaser.js
modules/ui/teaser/teaser.js
+14
-10
modules/ui/terms/terms.js
modules/ui/terms/terms.js
+14
-10
modules/ui/translate/translate.js
modules/ui/translate/translate.js
+33
-31
No files found.
js/main.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, todo: true, nomen: true */
/*global document: true, require: true */
(
function
()
{
"
use strict
"
;
var
IS_LOCAL
=
/
(
:
\/\/
localhost|file:
\/\/)
/
.
test
(
document
.
location
.
href
);
require
.
config
({
waitSeconds
:
(
IS_LOCAL
?
10
:
45
)
,
paths
:
{
waitSeconds
:
(
IS_LOCAL
?
10
:
45
),
paths
:
{
// core
app
:
'
../modules/core/app/app
'
,
config
:
'
../modules/core/config/config
'
,
polyfill
:
'
../modules/core/polyfill/polyfill
'
,
overrides
:
'
../modules/core/overrides/overrides
'
,
utilities
:
'
../modules/core/utilities/utilities
'
,
extensions
:
'
../modules/core/extensions/extensions
'
,
storage
:
'
../modules/core/storage/storage
'
app
:
'
../modules/core/app/app
'
,
config
:
'
../modules/core/config/config
'
,
polyfill
:
'
../modules/core/polyfill/polyfill
'
,
overrides
:
'
../modules/core/overrides/overrides
'
,
utilities
:
'
../modules/core/utilities/utilities
'
,
extensions
:
'
../modules/core/extensions/extensions
'
,
storage
:
'
../modules/core/storage/storage
'
,
// requireJs
,
almond
:
'
../js/libs/require/almond
'
,
text
:
'
../js/libs/require/text
'
,
css
:
'
../js/plugins/require-css/require-css
'
,
normalize
:
'
../js/plugins/require-css/normalize
'
,
json
:
'
../js/plugins/requirejs-plugins/json
'
,
async
:
'
../js/plugins/requirejs-plugins/async
'
almond
:
'
../js/libs/require/almond
'
,
text
:
'
../js/libs/require/text
'
,
css
:
'
../js/plugins/require-css/require-css
'
,
normalize
:
'
../js/plugins/require-css/normalize
'
,
json
:
'
../js/plugins/requirejs-plugins/json
'
,
async
:
'
../js/plugins/requirejs-plugins/async
'
,
// support
,
modernizr
:
'
../js/plugins/modernizr
'
,
selectivzr
:
'
../js/plugins/selectivzr
'
modernizr
:
'
../js/plugins/modernizr
'
,
selectivzr
:
'
../js/plugins/selectivzr
'
,
// plugins/libs
,
jquery
:
'
../js/libs/jquery/jquery
'
,
jqm
:
'
../js/libs/jquery-mobile/jquery-mobile
'
,
i18next
:
'
../js/plugins/i18next/i18next
'
,
renderjs
:
'
../js/plugins/renderjs/renderjs
'
,
jio
:
'
../js/libs/jio/jio
'
,
md5
:
'
../js/libs/jio/md5
'
,
localstorage
:
'
../js/libs/jio/localstorage
'
,
indexstorage
:
'
../js/libs/jio/indexstorage
'
,
complex_queries
:
'
../js/libs/jio/complex_queries
'
,
validval
:
'
../js/plugins/validval/validval
'
jquery
:
'
../js/libs/jquery/jquery
'
,
jqm
:
'
../js/libs/jquery-mobile/jquery-mobile
'
,
i18next
:
'
../js/plugins/i18next/i18next
'
,
renderjs
:
'
../js/plugins/renderjs/renderjs
'
,
jio
:
'
../js/libs/jio/jio
'
,
md5
:
'
../js/libs/jio/md5
'
,
localstorage
:
'
../js/libs/jio/localstorage
'
,
indexstorage
:
'
../js/libs/jio/indexstorage
'
,
complex_queries
:
'
../js/libs/jio/complex_queries
'
,
validval
:
'
../js/plugins/validval/validval
'
,
// page gadgets
,
address
:
'
../modules/ui/address/address
'
,
basket
:
'
../modules/ui/basket/basket
'
,
pagination
:
'
../modules/ui/pagination/pagination
'
,
confirm
:
'
../modules/ui/confirm/confirm
'
,
details
:
'
../modules/ui/details/details
'
,
footer
:
'
../modules/ui/footer/footer
'
,
gallery
:
'
../modules/ui/gallery/gallery
'
,
header
:
'
../modules/ui/header/header
'
,
index
:
'
../modules/ui/index/index
'
,
item
:
'
../modules/ui/item/item
'
,
items
:
'
../modules/ui/items/items
'
,
login
:
'
../modules/ui/login/login
'
,
media
:
'
../modules/ui/media/media
'
,
payment
:
'
../modules/ui/payment/payment
'
,
refine
:
'
../modules/ui/refine/refine
'
,
register
:
'
../modules/ui/register/register
'
,
products
:
'
../modules/ui/products/products
'
,
searchbar
:
'
../modules/ui/searchbar/searchbar
'
,
seo
:
'
../modules/ui/seo/seo
'
,
shipment
:
'
../modules/ui/shipment/shipment
'
,
sorting
:
'
../modules/ui/sorting/sorting
'
,
summary
:
'
../modules/ui/summary/summary
'
,
teaser
:
'
../modules/ui/teaser/teaser
'
,
terms
:
'
../modules/ui/terms/terms
'
,
translate
:
'
../modules/ui/translate/translate
'
,
pageheader
:
'
../modules/ui/pageheader/pageheader
'
,
pagefooter
:
'
../modules/ui/pagefooter/pagefooter
'
}
,
shim
:
{
'
jqm
'
:
{
deps
:
[
'
jquery
'
],
exports
:
'
mobile
'
}
,
'
jio
'
:
{
deps
:
[
'
md5
'
]
}
,
'
localstorage
'
:
{
deps
:
[
'
jio
'
,
'
complex_queries
'
]
}
,
'
indexstorage
'
:
{
deps
:
[
'
jio
'
]
}
,
'
renderjs
'
:
{
deps
:
[
'
jquery
'
],
exports
:
'
RenderJs
'
}
,
'
app
'
:
{
deps
:
[
'
jio
'
],
exports
:
'
App
'
}
,
'
validval
'
:
{
deps
:
[
'
jquery
'
]
}
}
,
map
:
{
address
:
'
../modules/ui/address/address
'
,
basket
:
'
../modules/ui/basket/basket
'
,
pagination
:
'
../modules/ui/pagination/pagination
'
,
confirm
:
'
../modules/ui/confirm/confirm
'
,
details
:
'
../modules/ui/details/details
'
,
footer
:
'
../modules/ui/footer/footer
'
,
gallery
:
'
../modules/ui/gallery/gallery
'
,
header
:
'
../modules/ui/header/header
'
,
index
:
'
../modules/ui/index/index
'
,
item
:
'
../modules/ui/item/item
'
,
items
:
'
../modules/ui/items/items
'
,
login
:
'
../modules/ui/login/login
'
,
media
:
'
../modules/ui/media/media
'
,
payment
:
'
../modules/ui/payment/payment
'
,
refine
:
'
../modules/ui/refine/refine
'
,
register
:
'
../modules/ui/register/register
'
,
products
:
'
../modules/ui/products/products
'
,
searchbar
:
'
../modules/ui/searchbar/searchbar
'
,
seo
:
'
../modules/ui/seo/seo
'
,
shipment
:
'
../modules/ui/shipment/shipment
'
,
sorting
:
'
../modules/ui/sorting/sorting
'
,
summary
:
'
../modules/ui/summary/summary
'
,
teaser
:
'
../modules/ui/teaser/teaser
'
,
terms
:
'
../modules/ui/terms/terms
'
,
translate
:
'
../modules/ui/translate/translate
'
,
pageheader
:
'
../modules/ui/pageheader/pageheader
'
,
pagefooter
:
'
../modules/ui/pagefooter/pagefooter
'
}
,
shim
:
{
'
jqm
'
:
{
deps
:
[
'
jquery
'
],
exports
:
'
mobile
'
},
'
jio
'
:
{
deps
:
[
'
md5
'
]
},
'
localstorage
'
:
{
deps
:
[
'
jio
'
,
'
complex_queries
'
]
},
'
indexstorage
'
:
{
deps
:
[
'
jio
'
]
},
'
renderjs
'
:
{
deps
:
[
'
jquery
'
],
exports
:
'
RenderJs
'
},
'
app
'
:
{
deps
:
[
'
jio
'
],
exports
:
'
App
'
},
'
validval
'
:
{
deps
:
[
'
jquery
'
]
}
}
,
map
:
{
'
*
'
:
{
'
css
'
:
'
../js/plugins/require-css/css
'
}
...
...
@@ -86,12 +87,11 @@
});
require
([
'
app
'
,
'
config
'
],
function
(
App
,
Config
)
{
require
([
'
app
'
,
'
config
'
],
function
(
App
,
Config
)
{
var
setup
=
new
$
.
Deferred
();
var
spec
=
{};
var
i
;
var
def
;
var
i
,
setup
=
new
$
.
Deferred
(),
spec
=
{};
spec
.
app
=
App
;
spec
.
config
=
Config
;
...
...
@@ -100,16 +100,18 @@
// fallback for fast browsers...
spec
.
fallbackLoader
=
{
deferreds
:
[],
args
:
[]
,
args
:
[]
};
// expose App once everything is loaded
spec
.
setup
.
done
(
function
(
App
,
Config
)
{
spec
.
setup
.
done
(
function
(
App
,
Config
)
{
// expose configuration - settings
App
.
settings
=
Config
.
settings
;
// expose configuration - storages
App
.
storage
=
Config
.
storage
;
// expose errors
App
.
errors
=
[];
for
(
i
=
0
;
i
<
window
.
fallbackLoader
.
deferreds
.
length
;
i
+=
1
)
{
window
.
fallbackLoader
.
deferreds
[
i
]
...
...
modules/core/app/app.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global document: true, $: true, require: true, define: true,
RenderJs: true */
define
([
'
overrides
'
,
'
jquery
'
,
'
jqm
'
,
'
extensions
'
,
'
polyfill
'
,
'
text
'
,
'
json
'
,
'
renderjs
'
,
'
i18next
'
,
'
css!../css/jquery-mobile/jquery-mobile.latest
'
,
'
css!../css/css
'
,
'
css!../css/normalize/normalize
'
],
function
()
{
'
overrides
'
,
'
jquery
'
,
'
jqm
'
,
'
extensions
'
,
'
polyfill
'
,
'
text
'
,
'
json
'
,
'
renderjs
'
,
'
i18next
'
,
'
css!../css/jquery-mobile/jquery-mobile.latest
'
,
'
css!../css/css
'
,
'
css!../css/normalize/normalize
'
],
function
()
{
"
use strict
"
;
var
priv
=
{};
var
that
=
{};
var
priv
=
{},
that
=
{};
/* ========================================================================
ATTRIBUTES
=====
=================================================================== */
/* =================================================================== */
/* ATTRIBUTES */
/*
=================================================================== */
// document
priv
.
doc
=
$
.
mobile
.
document
||
$
(
document
);
/* ========================================================================
FLAGS
======================================================================== */
/* =================================================================== */
/* FLAGS */
/* =================================================================== */
// first page loaded
priv
.
pageWrapLoad
ed
;
priv
.
pageWrapLoaded
=
undefin
ed
;
// ========================================================================
// INTERNAL METHODS
// ========================================================================
/* =================================================================== */
/* INTERNAL METHODS */
/* =================================================================== */
//
// add page header and footer (meta/scripts) to first page loaded (only!)
...
...
@@ -49,10 +55,9 @@ define([
// setup page header and footer configuration
priv
.
allset
.
resolve
(
spec
);
// .then(function(App, Config) {
// console.log("this should be the 2nd callback run AFTER we have set configuration");
// console.log(App);
// console.log(Config);
// .then(function(App, Config) {
// console.log(App);
// console.log(Config);
// var widgetsForThisRequest = [
// "text!../gadgets/pageheader.html",
...
...
@@ -68,15 +73,14 @@ define([
//
// for ( i = 0; i < widgetsForThisRequest.length; i++){
// template_target = target[i];
// // if customization based on user data required (add logo/img urls, etc)
// // it should be done here with widget being a string that can be
// // do all customizations with settings here!
// // modified with replace method
// widget = arguments[i];
// template_target.append( widget );
// }
// }
// );
// });
// });
}
...
...
@@ -130,7 +134,8 @@ define([
object
=
values
[
i
];
method
=
object
[
1
];
gadget
.
dom
.
find
(
"
.
"
+
object
[
0
])[
method
](
object
[
2
],
method
===
"
attr
"
?
object
[
3
]
:
null
object
[
2
],
method
===
"
attr
"
?
object
[
3
]
:
null
);
}
break
;
...
...
@@ -173,11 +178,11 @@ define([
});
}
})
.
on
(
'
pagebeforehide
'
,
'
div.ui-page
'
,
function
(
e
,
data
)
{
.
on
(
'
pagebeforehide
'
,
'
div.ui-page
'
,
function
(
e
,
data
)
{
// pagebeforehide triggers before remove and data includes the new
// page being loaded. This means we can override clearing the
gadgetIndex
// in case we are going to a page that has already been loaded. Instead
//
we setReady to false.
// page being loaded. This means we override clearing
gadgetIndex
// in case we are going to a page that has already been loaded.
// Instead
we setReady to false.
var
page
=
$
(
this
),
pageId
=
page
.
attr
(
'
id
'
),
nextPageId
=
data
.
nextPage
.
attr
(
'
id
'
),
...
...
@@ -195,7 +200,7 @@ define([
setFalse
=
true
;
}
})
.
on
(
'
pageremove
'
,
'
div.ui-page
'
,
function
(
e
,
data
)
{
.
on
(
'
pageremove
'
,
'
div.ui-page
'
,
function
(
)
{
var
page
=
$
(
this
),
pageId
=
page
.
attr
(
'
id
'
),
pageGadget
;
...
...
@@ -216,7 +221,7 @@ define([
RenderJs
.
GadgetIndex
.
unregisterGadget
(
pageGadget
);
}
setFalse
=
false
;
})
});
};
//
...
...
@@ -239,12 +244,12 @@ define([
// create new deferred for waiting until all initialization is done
priv
.
allset
=
new
$
.
Deferred
();
priv
.
allset
.
done
(
function
(
spec
)
{
priv
.
allset
.
done
(
function
(
spec
)
{
spec
.
configuration_setter
(
spec
);
});
// > set up globals
priv
.
setupGlobalParameters
()
priv
.
setupGlobalParameters
();
// > add <head>er and footer to first page only
priv
.
wrapFirstPage
(
spec
);
...
...
@@ -272,7 +277,8 @@ define([
gadget_cleaned_id
,
propsToSet
,
new_id
,
fwd
=
[],
i
;
fwd
=
[],
i
;
if
(
!
gadget_parent
.
is
(
"
.ui-page-active
"
))
{
return
;
...
...
@@ -284,7 +290,7 @@ define([
gadget
.
setEnhanced
(
true
);
}
gadget_props
=
gadget
[
"
state
"
]
;
gadget_props
=
gadget
.
state
;
gadget_cleaned_id
=
gadget_id
.
split
(
"
__
"
).
slice
(
-
1
)[
0
];
// JSON property API
...
...
@@ -309,7 +315,8 @@ define([
}
priv
.
getElements
(
gadget
,
"
a[data-rel='popup'], a[data-rel='panel']
"
gadget
,
"
a[data-rel='popup'], a[data-rel='panel']
"
).
each
(
function
()
{
var
href
=
this
.
getAttribute
(
'
href
'
).
replace
(
"
#
"
,
''
),
prefixedHref
=
priv
.
prefixElement
(
href
,
gadget_id
);
...
...
@@ -330,7 +337,8 @@ define([
priv
.
getElements
(
gadget
,
"
> div[data-gadget]
"
).
each
(
function
()
{
if
(
fwd
.
length
>
0
)
{
this
.
setAttribute
(
'
data-gadget-property
'
,
JSON
.
stringify
({
'
data-gadget-property
'
,
JSON
.
stringify
({
"
state
"
:
fwd
})
);
...
...
@@ -367,5 +375,5 @@ define([
// return public methods
return
that
;
});
\ No newline at end of file
}
);
\ No newline at end of file
modules/core/config/config.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global document: true, require: true, define: true, RenderJs: true */
define
([
'
app
'
,
'
storage
'
,
'
utilities
'
,
'
async
'
],
function
(
App
,
storage
)
{
'
storage
'
,
'
app
'
,
'
utilities
'
,
'
async
'
],
function
(
storage
)
{
"
use strict
"
;
var
priv
=
{}
;
var
that
=
{};
var
priv
=
{}
,
that
=
{};
// set return object
that
.
settings
=
{};
...
...
@@ -23,10 +25,10 @@ define([
spec
.
framed
=
"
medium
"
;
if
(
$
.
mobile
.
media
(
"
screen and (max-width:20em)
"
)
||
(
$
.
mobile
.
browser
.
oldIE
&&
$
(
window
).
width
()
<
o
.
lowerThresh
))
{
(
$
.
mobile
.
browser
.
oldIE
&&
$
(
window
).
width
()
<
spec
.
lowerThresh
))
{
spec
.
framed
=
"
small
"
;
}
else
if
(
$
.
mobile
.
media
(
"
screen and (min-width:45em)
"
)
||
(
$
.
mobile
.
browser
.
oldIE
&&
$
(
window
).
width
()
>=
o
.
upperThresh
))
{
(
$
.
mobile
.
browser
.
oldIE
&&
$
(
window
).
width
()
>=
spec
.
upperThresh
))
{
spec
.
framed
=
"
large
"
;
}
return
spec
.
framed
;
...
...
@@ -36,17 +38,24 @@ define([
if
(
spec
.
response
===
undefined
)
{
// TODO: this defaults could be set somewhere else as well
spec
.
config
.
settings
.
language_default
=
"
en-EN
"
;
spec
.
config
.
settings
.
language_current
=
spec
.
config
.
settings
.
language_default
;
spec
.
config
.
settings
.
language_current
=
spec
.
config
.
settings
.
language_default
;
spec
.
config
.
settings
.
language_selector
=
"
translate
"
;
spec
.
config
.
settings
.
language_set
=
"
false
"
;
spec
.
config
.
settings
.
item_selector
=
"
item_id
"
;
}
else
{
// create application settings
spec
.
config
.
settings
.
language_default
=
spec
.
response
.
language_default
||
"
en-EN
"
;
spec
.
config
.
settings
.
language_current
=
spec
.
response
.
language_current
||
spec
.
config
.
settings
.
language_default
;
spec
.
config
.
settings
.
language_selector
=
spec
.
response
.
selector
||
"
translate
"
;
spec
.
config
.
settings
.
language_set
=
spec
.
response
.
language_set
||
"
false
"
;
spec
.
config
.
settings
.
item_selector
=
spec
.
response
.
item_selector
||
"
item_id
"
;
spec
.
config
.
settings
.
language_default
=
spec
.
response
.
language_default
||
"
en-EN
"
;
spec
.
config
.
settings
.
language_current
=
spec
.
response
.
language_current
||
spec
.
config
.
settings
.
language_default
;
spec
.
config
.
settings
.
language_selector
=
spec
.
response
.
selector
||
"
translate
"
;
spec
.
config
.
settings
.
language_set
=
spec
.
response
.
language_set
||
"
false
"
;
spec
.
config
.
settings
.
item_selector
=
spec
.
response
.
item_selector
||
"
item_id
"
;
}
spec
.
config
.
settings
.
screen_format
=
priv
.
setScreenDimensions
();
...
...
@@ -60,7 +69,7 @@ define([
// store settings
if
(
data
!==
undefined
)
{
// add to localstorage
data
[
"
_id
"
]
=
"
config
"
;
data
.
_id
=
"
config
"
;
storage
.
queryStorage
({
"
storage
"
:
"
settings
"
,
...
...
@@ -75,8 +84,9 @@ define([
};
// fallback: collect configuration from file
$
.
getJSON
(
"
http://www.franckreich.de/members/export/x/configuration.json?callback=?
"
,
function
(
data
)
{
"
http://www.franckreich.de/members/export/x/
"
+
"
configuration.json?callback=?
"
,
function
(
data
)
{
priv
.
config_call
(
data
);
}
);
...
...
@@ -91,19 +101,20 @@ define([
spec
.
storage
=
"
settings
"
;
spec
.
method
=
"
get
"
;
spec
.
doc
=
{
"
_id
"
:
"
config
"
};
spec
.
doc
=
{
"
_id
"
:
"
config
"
};
spec
.
callback
=
function
(
err
,
response
)
{
spec
.
callback
=
function
(
err
,
response
)
{
if
(
err
)
{
priv
.
JSONPfallback
(
param
);
}
param
.
response
=
response
;
priv
.
setApplicationSetters
(
param
);
}
}
;
storage
.
queryStorage
(
spec
);
}
}
;
// return config
return
that
;
}
);
);
modules/core/extensions/extensions.js
View file @
0ea54899
This diff is collapsed.
Click to expand it.
modules/core/overrides/overrides.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global document: true, $: true, define: true, */
define
([
'
jquery
'
],
function
(
$
)
{
"
use strict
"
;
...
...
modules/core/storage/storage.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global document: true, $: true, define: true, jIO: true */
define
([
'
jquery
'
,
'
complex_queries
'
,
'
jio
'
,
'
md5
'
,
'
localstorage
'
//, 'indexstorage'
],
function
()
{
'
jquery
'
,
'
complex_queries
'
,
'
jio
'
,
'
md5
'
,
'
localstorage
'
],
function
()
{
"
use strict
"
;
var
priv
=
{};
var
that
=
{};
var
priv
=
{},
that
=
{};
// ==
======================================================================
//
======================================================================
// ATTRIBUTES
// ==
======================================================================
//
======================================================================
// ==
======================================================================
//
======================================================================
// INTERNAL METHODS
// ==
======================================================================
//
======================================================================
// ============================ JIO ========================
//
...
...
@@ -74,7 +76,9 @@ define([
"
price
"
:
44.95
,
"
original_price
"
:
64.95
,
"
total_sales
"
:
69
,
"
description
"
:
"
DOUBELT BREASTED JACKET 100% Polyester, matière souple et très résistante. entretien facile Coupe ajustée Fermeture boutons sur le devant Longueur : 78cm en taille S
"
,
"
description
"
:
"
DOUBELT BREASTED JACKET 100% Polyester, matière
"
+
"
souple et très résistante. entretien facile Coupe ajustée
"
+
"
Fermeture boutons sur le devant Longueur : 78cm en taille S
"
,
"
media
"
:
"
http://www.weinparis.com/en/product_module/
"
,
"
comments
"
:
[{
"
date
"
:
"
2012/12/13
"
,
...
...
@@ -160,7 +164,9 @@ define([
"
price
"
:
"
134.00
"
,
"
original_price
"
:
"
134.00
"
,
"
total_sales
"
:
40
,
"
description
"
:
"
Pantalon 95% polyester 5% spandex. Coupe droite. Fluide. Poches italiennes. Taille élastiquée. un look décontracté chic !
"
,
"
description
"
:
"
Pantalon 95% polyester 5% spandex. Coupe droite.
"
+
"
Fluide. Poches italiennes. Taille élastiquée. un look
"
+
"
décontracté chic !
"
,
"
media
"
:
"
http://www.weinparis.com/en/product_module/
"
,
"
comments
"
:
[{
"
date
"
:
"
2012/12/03
"
,
...
...
@@ -244,7 +250,8 @@ define([
"
price
"
:
"
45.00
"
,
"
original_price
"
:
"
65.00
"
,
"
total_sales
"
:
14
,
"
description
"
:
"
Pull bi-matière. coton bio avec polyester Col rond petite poche à une côte. coupe ample
"
,
"
description
"
:
"
Pull bi-matière. coton bio avec polyester Col rond
"
+
"
petite poche à une côte. coupe ample
"
,
"
media
"
:
"
http://www.weinparis.com/en/product_module/
"
,
"
comments
"
:
[{
"
date
"
:
"
2012/12/03
"
,
...
...
@@ -327,7 +334,9 @@ define([
"
price
"
:
"
55.00
"
,
"
original_price
"
:
"
75.00
"
,
"
total_sales
"
:
182
,
"
description
"
:
"
pantalon en 97% Cotton 3% Elastane Fermeture: braguette à fermeture éclair cachée Poches: poches de coté Lavage en machine à 30° C
"
,
"
description
"
:
"
pantalon en 97% Cotton 3% Elastane Fermeture:
"
+
"
braguette à fermeture éclair cachée Poches: poches de coté
"
+
"
Lavage en machine à 30° C
"
,
"
media
"
:
"
http://www.weinparis.com/en/product_module/
"
,
"
comments
"
:
[{
"
date
"
:
"
2012/12/01
"
,
...
...
@@ -535,7 +544,9 @@ define([
"
price
"
:
"
30.00
"
,
"
original_price
"
:
"
45.00
"
,
"
total_sales
"
:
5
,
"
description
"
:
"
Debarteur en Polyester. matière souple et très résistante. entretien facile Coupe ample Fermeture éclair sur le dos.
"
,
"
description
"
:
"
Debarteur en Polyester. matière souple et très
"
+
"
résistante. entretien facile Coupe ample Fermeture éclair
"
+
"
sur le dos.
"
,
"
media
"
:
"
http://www.weinparis.com/en/product_module/
"
,
"
comments
"
:
[{
"
date
"
:
"
2012/11/03
"
,
...
...
@@ -608,7 +619,7 @@ define([
priv
.
initialize
=
function
()
{
// > set up JIOs
priv
.
setupJIO
(
function
()
{
priv
.
setupJIO
(
function
()
{
// > populate JIOs
priv
.
populate_item_storage
();
});
...
...
@@ -618,7 +629,7 @@ define([
// PUBLIC METHODS => window.App.method()
// ========================================================================
//
//
// query one of the available storages
// @method queryStorage
// @param {object} param > jIO parameters (storage, method, doc, options...)
...
...
@@ -626,7 +637,11 @@ define([
//
that
.
queryStorage
=
function
(
param
)
{
if
(
param
.
doc
!==
undefined
)
{
priv
[
param
.
storage
][
param
.
method
](
param
.
doc
,
param
.
options
,
param
.
callback
);
priv
[
param
.
storage
][
param
.
method
](
param
.
doc
,
param
.
options
,
param
.
callback
);
}
else
{
priv
[
param
.
storage
][
param
.
method
](
param
.
options
,
param
.
callback
);
}
...
...
@@ -666,23 +681,26 @@ define([
query
.
limit
=
[];
query
.
sort_on
=
[];
query
.
select_list
=
[];
query
.
wildcard_character
=
'
%
'
query
.
wildcard_character
=
'
%
'
;
// if we have a pointer, we can disregard method & options,
// but we must set on spec directly, because query will only be
// assigned in a defined case
// TODO: not nice to hardquery for "allDocs" here, but... improve later
if
(
param
.
pointer
===
undefined
&&
param
.
method
===
"
allDocs
"
&&
spec
.
options
!==
undefined
)
{
if
(
param
.
pointer
===
undefined
&&
param
.
method
===
"
allDocs
"
&&
spec
.
options
!==
undefined
)
{
spec
.
options
.
limit
=
param
.
options
.
limit
;
spec
.
options
.
sort_on
=
param
.
options
.
sort_on
;
spec
.
options
.
select_list
=
param
.
options
.
select_list
||
spec
.
default_items
;
spec
.
options
.
wildcard_character
=
'
%
'
spec
.
options
.
select_list
=
param
.
options
.
select_list
||
spec
.
default_items
;
spec
.
options
.
wildcard_character
=
'
%
'
;
}
// queries can be run
// > with different cases (currently upper/lower case),
// > on full select_list (passed elements or default),
// > without a query object, if empty string is passed (nothing to parse, faster search
)
// > without a query object, if empty string is passed (parse faster
)
// > TODO: optionable?
if
(
spec
.
query
)
{
if
(
spec
.
query_string
!==
""
)
{
...
...
@@ -690,13 +708,16 @@ define([
spec
.
query_string
,
spec
.
query_string
.
toUpperCase
(),
spec
.
query_string
.
toLowerCase
(),
spec
.
query_string
.
charAt
(
0
).
toUpperCase
()
+
spec
.
query_string
.
slice
(
1
)
spec
.
query_string
.
charAt
(
0
).
toUpperCase
()
+
spec
.
query_string
.
slice
(
1
)
);
for
(
j
=
0
;
j
<
cases
.
length
;
j
+=
1
)
{
for
(
i
=
0
;
i
<
spec
.
options
.
select_list
.
length
;
i
+=
1
)
{
item
=
spec
.
options
.
select_list
[
i
];
searchString
+=
item
+
'
: = "
'
+
query
.
wildcard_character
+
cases
[
j
]
+
query
.
wildcard_character
+
'
"
'
;
if
(
i
<
spec
.
options
.
select_list
.
length
-
1
)
{
searchString
+=
item
+
'
: = "
'
+
query
.
wildcard_character
+
cases
[
j
]
+
query
.
wildcard_character
+
'
"
'
;
if
(
i
<
spec
.
options
.
select_list
.
length
-
1
)
{
searchString
+=
'
OR
'
;
}
}
...
...
@@ -729,15 +750,16 @@ define([
break
;
}
};
// ==
======================================================================
//
======================================================================
// INITIALIZE
// ==
======================================================================
//
======================================================================
priv
.
initialize
();
// ==
======================================================================
//
======================================================================
// PUBLISH APP
// ==
======================================================================
//
======================================================================
// return public methods to main.js
return
that
;
});
\ No newline at end of file
}
);
modules/core/utilities/utilities.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global document: true, define: true, $: true */
define
([
'
app
'
],
function
(
App
)
{
],
function
(
App
)
{
"
use strict
"
;
// this module provides generic methods usable across all gadgets/modules
var
that
=
{};
...
...
@@ -17,19 +20,18 @@ define([
while
(
elem
)
{
if
(
matchesSelector
.
bind
(
elem
)(
selector
))
{
return
elem
;
}
else
{
elem
=
elem
.
parentNode
;
}
elem
=
elem
.
parentNode
;
}
return
false
;
}
else
{
}
// opera...
fallback
=
$
(
elem
).
closest
(
selector
);
fallback
=
$
(
elem
).
closest
(
selector
);
if
(
fallback
.
length
>
0
)
{
return
fallback
;
}
return
false
;
}
};
// object size
that
.
objectSize
=
function
(
obj
)
{
...
...
@@ -37,7 +39,7 @@ define([
for
(
key
in
obj
)
{
if
(
obj
.
hasOwnProperty
(
key
))
{
size
++
;
size
+=
1
;
}
}
return
size
;
...
...
@@ -47,4 +49,4 @@ define([
return
undefined
;
}
);
\ No newline at end of file
);
modules/ui/address/address.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, $: true, define: true, window: true */
define
([
'
app
'
,
'
text!address.html!strip
'
,
'
validval
'
,
'
css!address
'
],
function
(
App
,
source
,
validator
)
{
var
response
=
{};
'
app
'
,
'
text!address.html!strip
'
,
'
validval
'
,
'
css!address
'
],
function
(
App
,
source
)
{
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -28,4 +32,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/basket/basket.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!basket.html!strip
'
,
'
css!basket
'
],
'
app
'
,
'
text!basket.html!strip
'
,
'
validval
'
,
'
css!basket
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +32,5 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/confirm/confirm.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!confirm.html!strip
'
,
'
css!confirm
'
],
'
app
'
,
'
text!confirm.html!strip
'
,
'
validval
'
,
'
css!confirm
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +32,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/details/details.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global define: true, $: true, define: true, window: true, App: true */
define
([
'
app
'
,
'
text!details.html!strip
'
,
'
css!details
'
],
'
app
'
,
'
text!details.html!strip
'
,
'
css!details
'
],
function
(
App
,
source
)
{
var
that
=
{};
var
priv
=
{};
"
use strict
"
;
var
that
=
{},
priv
=
{};
// cleanup memory
priv
.
cleanupMemory
=
function
(
memory
)
{
...
...
@@ -40,30 +44,33 @@ define([
var
id
,
now
,
spec
,
module
;
// we will have an item to display. Grab it and go!
if
(
location
.
search
!==
""
)
{
if
(
window
.
location
.
search
!==
""
)
{
spec
=
{};
spec
.
pointer
=
location
.
search
.
split
(
"
=
"
)[
1
];
spec
.
storage
=
"
items
"
spec
.
method
=
"
get
"
spec
.
doc
=
{
"
_id
"
:
spec
.
pointer
}
spec
.
pointer
=
window
.
location
.
search
.
split
(
"
=
"
)[
1
];
spec
.
storage
=
"
items
"
;
spec
.
method
=
"
get
"
;
spec
.
doc
=
{
"
_id
"
:
spec
.
pointer
}
;
// TODO: should be passed via JSON?
module
=
"
storage
"
;
now
=
new
Date
().
getTime
();
}
else
{
// route to all products
$
.
mobile
.
changePage
(
"
products.html
"
,
{
"
transition
"
:
"
fade
"
});
$
.
mobile
.
changePage
(
"
products.html
"
,
{
"
transition
"
:
"
fade
"
});
}
// jio response
spec
.
callback
=
function
(
err
,
response
)
{
spec
.
callback
=
function
(
err
,
response
)
{
if
(
err
)
{
// error handling
App
.
errors
.
push
({
module
:
"
details
"
,
timestamp
:
now
,
error
:
err
});
}
else
{
id
=
response
.
_id
;
App
.
cacheItems
[
id
]
=
[
response
,
now
];
// memory
...
...
@@ -72,7 +79,7 @@ define([
// this is not response.callback(!!)
params
.
callback_mockup
(
params
.
source
);
}
}
;
// query for items
App
[
module
].
switchboard
(
spec
);
};
...
...
@@ -96,14 +103,20 @@ define([
// // TODO: this is for page event bindings. Once JQM content replaces
// // page, remove this and make the gadget the content section to
// // be updated.
// spec.page = App.util.closest(spec.gadget.dom.get(0), "div[data-role='page']");
// spec.page = App.util.closest(
// spec.gadget.dom.get(0),
// "div[data-role='page']"
// );
// spec.pageId = "#" + spec.page.id;
// spec.source = source;
// spec.callback_mockup = callback_mockup;
//
// if (!spec.page.getAttribute("events_details")) {
// spec.page.setAttribute("events_details", true);
// $(document).on("pagebeforeshow.details", spec.pageId, function (e, data) {
// $(document).on(
// "pagebeforeshow.details",
// spec.pageId,
// function (e, data) {
// // TODO: if we allow to reload, we also need to trigger refresh on
// // so we need to reload this every time a page is shown. question
// // is how to trigger a refresh on this element ONLY
...
...
@@ -116,9 +129,9 @@ define([
that
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
var
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -134,4 +147,4 @@ define([
// return response object
return
that
;
}
);
);
modules/ui/footer/footer.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!footer.html!strip
'
,
'
css!footer
'
],
'
app
'
,
'
text!footer.html!strip
'
,
'
css!footer
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/gallery/gallery.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global define: true, $: true, define: true, window: true, App: true, RenderJs: true,
document: true */
define
([
'
app
'
,
'
text!gallery.html!strip
'
,
'
css!gallery
'
],
'
app
'
,
'
text!gallery.html!strip
'
,
'
css!gallery
'
],
function
(
App
,
source
)
{
var
that
=
{};
var
priv
=
{};
"
use strict
"
;
var
that
=
{},
priv
=
{};
// ========================== ATTRIBUTES ==============================
// set response, so it's available across function calls
priv
.
response
;
priv
.
response
=
undefined
;
priv
.
generateGallery
=
function
(
response
)
{
// expose response (will be overwritten, when next item loads
...
...
@@ -21,7 +26,7 @@ define([
// TODO: zoom is missing, this should also be a feature of gallery
// TODO: 404 fallback images!
// ala photoswipe
var
i
,
j
,
item
,
img
,
gallery
,
thumbnails
=
""
,
str
,
obj
,
variations
;
var
i
,
item
,
gallery
,
thumbnails
=
""
,
variations
;
gallery
=
"
<div class='gallery_wrap'><ul data-role='carousel'
"
+
"
data-inset='true' class='ui-responsive tester'
"
+
...
...
@@ -37,15 +42,18 @@ define([
variations
=
priv
.
response
.
dimensions
[
0
].
vars
;
if
(
variations
.
length
>
1
)
{
thumbnails
+=
"
<div class='gallery_thumbnails '><ul data-role='
"
+
"
listview' data-inset='true' class='gallery_thumbnail_wrapper'>
"
;
for
(
i
=
0
;
i
<
variations
.
length
;
i
+=
1
)
{
item
=
variations
[
i
];
// thumbnails - click on link should trigger the display method
thumbnails
+=
"
<li data-icon='false'><a href='#
"
+
item
.
name
+
"
' class='
"
+
"
display_item'><img src='
"
+
response
.
media
+
item
.
media
.
img
[
0
][
"
t
"
]
+
"
' alt='
"
+
item
.
name
+
"
' /><h3 class='translate gallery_header' data-i18n='
"
+
thumbnails
+=
"
<li data-icon='false'><a href='#
"
+
item
.
name
+
"
' class='display_item'><img src='
"
+
response
.
media
+
item
.
media
.
img
[
0
].
t
+
"
' alt='
"
+
item
.
name
+
"
' /><h3 class='translate gallery_header' data-i18n='
"
+
item
.
i18n
+
"
'>
"
+
item
.
name
+
"
</h3></li>
"
;
}
thumbnails
+=
"
</ul></div>
"
;
...
...
@@ -54,7 +62,7 @@ define([
gallery
+=
"
</ul></div>
"
;
return
str
=
gallery
+
thumbnails
;
return
gallery
+
thumbnails
;
};
// TODO: show some thing
...
...
@@ -79,15 +87,19 @@ define([
// generate gallery list items
priv
.
generateGalleryItems
=
function
(
name
)
{
var
i
,
j
,
item
,
img
,
str
=
""
;
item
=
priv
.
response
.
dimensions
[
0
].
vars
[
0
];
var
i
,
j
,
img
,
str
=
""
,
// TODO: should not be hardcoded to first variation!!!
item
=
priv
.
response
.
dimensions
[
0
].
vars
[
0
],
screen
=
App
.
settings
.
screen_format
,
size
=
screen
===
"
small
"
?
"
small
"
:
"
medium
"
,
shortcut
=
size
.
substring
(
0
,
1
);
// find item name or default to first variant in dimension
if
(
name
!==
undefined
)
{
for
(
i
=
0
;
i
<
priv
.
response
.
dimensions
[
0
].
vars
.
length
;
i
+=
1
)
{
item
=
priv
.
response
.
dimensions
[
0
].
vars
[
i
];
if
(
item
.
name
===
name
||
location
.
hash
===
name
)
{
if
(
item
.
name
===
name
||
window
.
location
.
hash
===
name
)
{
break
;
}
}
...
...
@@ -99,10 +111,10 @@ define([
for
(
j
=
0
;
j
<
item
.
media
.
img
.
length
;
j
+=
1
)
{
img
=
item
.
media
.
img
[
j
];
// TODO: add zoom/photoswipe later!
str
+=
"
<li class='product_img'><a href='#'><img src='
"
+
priv
.
response
.
media
+
img
[
shortcut
]
+
size
+
"
' alt='
"
+
item
.
name
+
"
' />
"
+
"
<h3 class='translate gallery_header' data-i18n='
"
+
item
.
i18n
+
"
'></h3></a></li>
"
;
str
+=
"
<li class='product_img'><a href='#'><img src='
"
+
priv
.
response
.
media
+
img
[
shortcut
]
+
size
+
"
' alt='
"
+
item
.
name
+
"
' />
"
+
"
<h3 class='translate gallery_header'
"
+
"
data-i18n='
"
+
item
.
i18n
+
"
'></h3></a></li>
"
;
}
return
str
;
...
...
@@ -120,17 +132,12 @@ define([
// generate items to display
priv
.
generateItems
=
function
(
params
)
{
var
markup
,
spec
,
response
;
var
markup
,
spec
,
id
=
params
.
gadget
.
dom
.
attr
(
'
id
'
).
split
(
"
__
"
).
splice
(
-
1
)[
0
],
config
=
params
.
gadget
.
state
[
0
][
id
].
_config
,
module
=
config
.
datasource
.
module
,
urlPointer
=
params
.
pointer
.
length
>
1
,
jsonPointer
=
config
.
datasource
.
pointer
,
// TODO: settable options
screen
=
App
.
settings
.
screen_format
,
size
=
screen
===
"
small
"
?
"
small
"
:
"
medium
"
,
shortcut
=
size
.
substring
(
0
,
1
);
jsonPointer
=
config
.
datasource
.
pointer
;
// if we have a pointer-array passed, query that
// TODO: this is not flexible yet, because "items" and "get" are hardcoded
...
...
@@ -138,9 +145,9 @@ define([
// what is stored on the image links...
if
(
urlPointer
)
{
spec
=
{};
spec
.
storage
=
"
items
"
spec
.
method
=
"
get
"
spec
.
doc
=
{
"
_id
"
:
params
.
pointer
[
1
]}
spec
.
storage
=
"
items
"
;
spec
.
method
=
"
get
"
;
spec
.
doc
=
{
"
_id
"
:
params
.
pointer
[
1
]}
;
}
if
(
jsonPointer
)
{
...
...
@@ -149,15 +156,28 @@ define([
// in the configuration file, as it's something the user can use or not
// also - should be possible to make this fullscreen by supplying the
// carousel options!
spec
.
items
=
[
{
"
src
"
:
"
img/stella.jpg
"
,
"
caption
"
:
"
Stella
"
,
"
i18n
"
:
"
custom.teaser.stella
"
,
"
href
"
:
"
products.html?search=stella
"
},
{
"
src
"
:
"
img/nannin.jpg
"
,
"
caption
"
:
"
Nan
"
,
"
i18n
"
:
"
custom.teaser.nan
"
,
"
href
"
:
"
products.html?search=nan
"
},
{
"
src
"
:
"
img/vila.jpg
"
,
"
caption
"
:
"
Vila
"
,
"
i18n
"
:
"
custom.teaser.vila
"
,
"
href
"
:
"
products.html?search=vila
"
}
]
spec
.
items
=
[{
"
src
"
:
"
img/stella.jpg
"
,
"
caption
"
:
"
Stella
"
,
"
i18n
"
:
"
custom.teaser.stella
"
,
"
href
"
:
"
products.html?search=stella
"
},
{
"
src
"
:
"
img/nannin.jpg
"
,
"
caption
"
:
"
Nan
"
,
"
i18n
"
:
"
custom.teaser.nan
"
,
"
href
"
:
"
products.html?search=nan
"
},
{
"
src
"
:
"
img/vila.jpg
"
,
"
caption
"
:
"
Vila
"
,
"
i18n
"
:
"
custom.teaser.vila
"
,
"
href
"
:
"
products.html?search=vila
"
}];
}
// callback to generate gallery
spec
.
callback
=
function
(
err
,
response
)
{
spec
.
callback
=
function
(
err
,
response
)
{
var
str
;
if
(
err
)
{
str
=
priv
.
generateError
();
}
else
{
...
...
@@ -184,7 +204,7 @@ define([
// just run callback now and generate gallery
spec
.
callback
(
undefined
,
spec
);
}
}
}
;
// response object
that
.
data
=
source
;
...
...
@@ -192,11 +212,14 @@ define([
var
spec
=
{};
spec
.
gadget
=
RenderJs
.
getSelfGadget
();
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
pageId
=
"
#
"
+
spec
.
page
.
id
;
// TODO: retrieving pointers should be a generic method that retrieves
// pointers either from the URL or from a JSON config object passed!
spec
.
pointer
=
location
.
search
.
split
(
"
=
"
);
spec
.
pointer
=
window
.
location
.
search
.
split
(
"
=
"
);
spec
.
callback_mockup
=
callback_mockup
;
spec
.
source
=
source
;
...
...
@@ -204,10 +227,10 @@ define([
if
(
!
spec
.
page
.
getAttribute
(
"
events_gallery
"
))
{
spec
.
page
.
setAttribute
(
"
events_gallery
"
,
true
);
$
(
document
).
on
(
"
pagebeforeshow.gallery
"
,
spec
.
pageId
,
function
(
e
)
{
$
(
document
).
on
(
"
pagebeforeshow.gallery
"
,
spec
.
pageId
,
function
()
{
// the pointer in the URL may be updated
if
(
location
.
search
)
{
spec
.
pointer
=
location
.
search
.
split
(
"
=
"
);
if
(
window
.
location
.
search
)
{
spec
.
pointer
=
window
.
location
.
search
.
split
(
"
=
"
);
}
priv
.
generateItems
(
spec
,
true
);
})
...
...
@@ -229,9 +252,9 @@ define([
that
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
var
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
,
true
);
});
...
...
@@ -247,4 +270,4 @@ define([
// return response object
return
that
;
}
);
);
modules/ui/header/header.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!header.html!strip
'
,
'
css!header
'
],
'
app
'
,
'
text!header.html!strip
'
,
'
css!header
'
],
function
(
App
,
source
)
{
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
// TODO: this should be inside renderJs, although its application-specific
// but the problem with using async-render-require will be everything
// being loaded at the same time, so the user should have the opportunity
// to run his callback no matter where. Still not sure where to wait
// (app-init or render-init), but it would be nice if a renderjs application
// would allow for a first page load deferred on all gadgets until some
// flag is set. In rjs2, we will not have to set globals, but we will
// have the problem of trying to access methods published by other gadgets
// BEFORE they have been published, so it's pretty much the same thing.
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -36,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/index/index.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!index.html!strip
'
,
'
css!index
'
],
'
app
'
,
'
text!index.html!strip
'
,
'
css!index
'
],
function
(
App
,
source
)
{
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/item/item.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global define: true, $: true, define: true, window: true, App: true,
RenderJs: true, document: true */
define
([
'
app
'
,
'
text!item.html!strip
'
,
'
css!item
'
],
'
app
'
,
'
text!item.html!strip
'
,
'
css!item
'
],
function
(
App
,
source
)
{
var
that
=
{};
var
priv
=
{};
"
use strict
"
;
var
that
=
{},
priv
=
{};
// ========================== ATTRIBUTES ==============================
// set response, so it's available across function calls
priv
.
response
;
priv
.
response
=
undefined
;
priv
.
generateContent
=
function
(
response
)
{
var
i
,
j
,
k
,
content
,
child
,
dimension
,
dimensions
,
variation
,
var
i
,
j
,
k
,
content
,
child
,
dimension
,
dimensions
,
variation
,
price
,
sub_dimension
,
sub_dimension_i18n
,
str
,
select
,
element
,
soldout
;
// expose response (will be overwritten, when next item loads
...
...
@@ -61,7 +66,7 @@ define([
select
=
""
;
}
dimensions
+=
"
<option class='translate' data-i18n='
"
+
variation
.
i18n
+
"
'
"
+
select
+
"
value='
"
+
variation
.
name
+
variation
.
i18n
+
"
'
"
+
select
+
"
value='
"
+
variation
.
name
+
"
'>
"
+
variation
.
name
+
"
</option>
"
;
}
...
...
@@ -88,10 +93,11 @@ define([
soldout
=
"
disabled
"
;
}
child
+=
"
<option class='translate' data-i18n='
"
+
element
.
i18n
+
"
'
"
+
soldout
+
"
value ='
"
+
element
.
name
+
"
'>
"
+
+
"
</option>
"
;
"
'
"
+
soldout
+
"
value ='
"
+
element
.
name
+
"
'>
"
+
element
.
name
+
"
</option>
"
;
}
}
str
=
content
+
dimensions
+
child
+
"
</select></div>
"
;
str
=
content
+
dimensions
+
child
+
"
</select></div>
"
;
return
[
str
,
response
.
description
];
};
...
...
@@ -101,7 +107,7 @@ define([
};
// generate content items?
priv
.
generateContentItems
=
function
(
name
)
{
//
priv.generateContentItems = function (name) {
// var i, j, item, img, str = "";
//
// item = priv.response.dimensions[0].vars[0];
...
...
@@ -110,7 +116,7 @@ define([
// if (name !== undefined) {
// for (i = 0; i < priv.response.dimensions[0].vars.length; i += 1) {
// item = priv.response.dimensions[0].vars[i];
//
if (item.name === name ||
location.hash === name) {
//
if (item.name === name || window.
location.hash === name) {
// break;
// }
// }
...
...
@@ -122,49 +128,47 @@ define([
// for (j = 0; j < item.media.img.length; j += 1) {
// img = item.media.img[j];
// // TODO: add zoom/photoswipe later!
// str += "<li class='product_img'><a href='#'><img src='" +
priv.response.media +
//
img[shortcut] + size + "' alt='" + item.name + "' />
" +
//
"<h3 class='translate gallery_header' data-i18n='
" +
//
item.i18n + "'></h3></a></li>";
// str += "<li class='product_img'><a href='#'><img src='" +
//
priv.response.media + img[shortcut] + size + "' alt='
" +
//
item.name + "' />" + "<h3 class='translate gallery_header'
" +
//
data-i18n='" +
item.i18n + "'></h3></a></li>";
// }
//
// return str;
};
//
};
priv
.
swapSecondaryOptions
=
function
(
name
,
element
)
{
//
priv.swapSecondaryOptions = function (name, element) {
// var newString = priv.generateContentItems(name),
// // TODO: if thumbnails are a gallery option, it should be possible
// // to reference the gallery from the thumbnail without doing this:
// wrap = App.util.closest(element, ".gallery_thumbnails").previousSibling,
// wrap = App.util.closest(
// element,
// ".gallery_thumbnails"
// ).previousSibling,
// gallery = wrap.getElementsByTagName("ul");
//
// $(gallery[0]).empty().append(newString).carousel("refresh");
};
//
};
// generate items to display
priv
.
generateItems
=
function
(
params
)
{
var
markup
,
spec
,
response
;
var
markup
,
spec
,
id
=
params
.
gadget
.
dom
.
attr
(
'
id
'
).
split
(
"
__
"
).
splice
(
-
1
)[
0
],
config
=
params
.
gadget
.
state
[
0
][
id
].
_config
,
module
=
config
.
datasource
.
module
,
urlPointer
=
params
.
pointer
.
length
>
1
,
jsonPointer
=
config
.
datasource
.
pointer
;
urlPointer
=
params
.
pointer
.
length
>
1
;
// if we have a pointer-array passed, query that
// TODO: this access a globally stored current_item set by details gadget!
if
(
urlPointer
)
{
spec
=
{};
spec
.
storage
=
"
items
"
spec
.
method
=
"
get
"
spec
.
doc
=
{
"
_id
"
:
params
.
pointer
[
1
]}
}
if
(
jsonPointer
)
{
spec
.
storage
=
"
items
"
;
spec
.
method
=
"
get
"
;
spec
.
doc
=
{
"
_id
"
:
params
.
pointer
[
1
]};
}
// callback to generate gallery
spec
.
callback
=
function
(
err
,
response
)
{
spec
.
callback
=
function
(
err
,
response
)
{
var
str
;
if
(
err
)
{
...
...
@@ -184,7 +188,7 @@ define([
if
(
urlPointer
)
{
App
[
module
].
switchboard
(
spec
);
}
}
}
;
// response object
that
.
data
=
source
;
...
...
@@ -192,11 +196,14 @@ define([
var
spec
=
{};
spec
.
gadget
=
RenderJs
.
getSelfGadget
();
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
pageId
=
"
#
"
+
spec
.
page
.
id
;
// TODO: retrieving pointers should be a generic method that retrieves
// pointers either from the URL or from a JSON config object passed!
spec
.
pointer
=
location
.
search
.
split
(
"
=
"
);
spec
.
pointer
=
window
.
location
.
search
.
split
(
"
=
"
);
spec
.
callback_mockup
=
callback_mockup
;
spec
.
source
=
source
;
...
...
@@ -204,14 +211,14 @@ define([
if
(
!
spec
.
page
.
getAttribute
(
"
events_items
"
))
{
spec
.
page
.
setAttribute
(
"
events_items
"
,
true
);
$
(
document
).
on
(
"
pagebeforeshow.items
"
,
spec
.
pageId
,
function
(
e
)
{
$
(
document
).
on
(
"
pagebeforeshow.items
"
,
spec
.
pageId
,
function
()
{
// the pointer in the URL may be updated
if
(
location
.
search
)
{
spec
.
pointer
=
location
.
search
.
split
(
"
=
"
);
if
(
window
.
location
.
search
)
{
spec
.
pointer
=
window
.
location
.
search
.
split
(
"
=
"
);
}
priv
.
generateItems
(
spec
,
true
);
})
.
on
(
"
change.item
"
,
spec
.
pageId
+
"
.main_dimension
"
,
function
(
e
)
{
})
;
//
.on("change.item", spec.pageId + " .main_dimension", function (e) {
// var target = e.target,
// color;
//
...
...
@@ -221,7 +228,7 @@ define([
// color = App.util.closest(target, "a").href.split("#")[1];
// }
// priv.swapSecondaryOptions(color, e.target);
});
//
});
// and run intial
priv
.
generateItems
(
spec
);
}
...
...
@@ -229,9 +236,9 @@ define([
that
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
var
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
,
true
);
});
...
...
@@ -247,4 +254,4 @@ define([
// return response object
return
that
;
}
);
);
modules/ui/items/items.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global define: true, $: true, define: true, window: true, App: true,
RenderJs: true, document: true */
define
([
'
app
'
,
'
text!items.html!strip
'
,
'
css!items
'
],
'
app
'
,
'
text!items.html!strip
'
,
'
css!items
'
],
function
(
App
,
source
)
{
var
that
=
{};
var
priv
=
{};
"
use strict
"
;
var
that
=
{},
priv
=
{};
// in the perfect renderjs world, the items gadget should either expose
// an API on how to pass ... query string ... or have default config
...
...
@@ -14,12 +19,11 @@ define([
// generate items to display
priv
.
generateItems
=
function
(
params
)
{
var
markup
,
spec
,
var
markup
,
spec
,
id
=
params
.
gadget
.
dom
.
attr
(
'
id
'
).
split
(
"
__
"
).
splice
(
-
1
)[
0
],
config
=
params
.
gadget
.
state
[
0
][
id
].
_config
,
module
=
config
.
datasource
.
module
,
// settable options
screen
=
App
.
settings
.
screen_format
,
size
=
screen
===
"
small
"
?
"
small
"
:
"
medium
"
,
shortcut
=
size
.
substring
(
0
,
1
),
...
...
@@ -28,23 +32,31 @@ define([
spec
=
{};
spec
.
pointer
=
config
.
datasource
.
pointer
;
spec
.
method
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
method
||
"
allDocs
"
;
spec
.
storage
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
storage
||
"
items
"
;
spec
.
options
=
spec
.
pointer
?
undefined
:
{
spec
.
method
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
method
||
"
allDocs
"
;
spec
.
storage
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
storage
||
"
items
"
;
spec
.
options
=
spec
.
pointer
?
undefined
:
{
"
limit
"
:
config
.
datasource
.
limit
||
[
0
,
24
],
"
sort_on
"
:
config
.
datasource
.
sort
||
[[
"
_id
"
,
"
descending
"
]],
"
select_list
"
:
config
.
datasource
.
fields
||
undefined
};
// if we have a search tag being passed, run a search
if
(
location
.
search
!==
""
)
{
if
(
window
.
location
.
search
!==
""
)
{
spec
.
query
=
true
;
spec
.
query_string
=
location
.
search
.
split
(
"
=
"
)[
1
].
replace
(
"
+
"
,
"
"
);
spec
.
query_string
=
window
.
location
.
search
.
split
(
"
=
"
)[
1
].
replace
(
"
+
"
,
"
"
);
}
spec
.
callback
=
function
(
err
,
response
)
{
var
item
,
i
,
str
=
""
,
price
;
spec
.
callback
=
function
(
err
,
response
)
{
var
item
,
i
,
str
=
""
,
price
,
now
=
new
Date
().
getTime
();
if
(
err
)
{
App
.
errors
.
push
([
"
items
"
,
now
,
err
]);
}
// cleanup
// no results
...
...
@@ -66,11 +78,11 @@ define([
price
=
item
.
price
+
item
.
currency
;
}
else
{
price
=
"
<span class='rebate'>
"
+
item
.
price
+
item
.
currency
+
"
</span> (
"
+
item
.
original_price
+
item
.
currency
+
"
)
"
;
"
</span> (
"
+
item
.
original_price
+
item
.
currency
+
"
)
"
;
}
str
+=
"
<li data-icon='false'>
"
+
"
<a href='details.html?
"
+
identifier
+
"
=
"
+
"
<a href='details.html?
"
+
identifier
+
"
=
"
+
encodeURI
(
item
[
identifier
])
+
"
' title='
"
+
item
.
brand
+
"
,
"
+
item
.
title
+
"
'>
"
+
"
<span class='img_container_items'>
"
+
...
...
@@ -88,7 +100,7 @@ define([
// this is not response.callback(!!)
params
.
callback_mockup
(
markup
);
}
}
;
// query for items
App
[
module
].
switchboard
(
spec
);
...
...
@@ -103,22 +115,27 @@ define([
// TODO: this is for page event bindings. Once JQM content replaces
// page, remove this and make the gadget the content section to
// be updated.
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
pageId
=
"
#
"
+
spec
.
page
.
id
;
spec
.
source
=
source
;
spec
.
callback_mockup
=
callback_mockup
;
if
(
!
spec
.
page
.
getAttribute
(
"
events_items
"
))
{
spec
.
page
.
setAttribute
(
"
events_items
"
,
true
);
$
(
document
).
on
(
"
pagebeforeshow.items
"
,
spec
.
pageId
,
function
(
e
,
data
)
{
// TODO: if we allow to reload, we also need to trigger refresh on
$
(
document
).
on
(
"
pagebeforeshow.items
"
,
spec
.
pageId
,
function
()
{
// TODO: if we allow reload, we also need to trigger refresh on
// so we need to reload this every time a page is shown. question
// is how to trigger a refresh on this element ONLY
// > the gadgets should tell whether they need enhancement!
//if ($.mobile.firstPage.attr('id') !== spec.pageId.replace("#","")) {
priv
.
generateItems
(
spec
);
//
}
}
);
}
);
// and run intial
priv
.
generateItems
(
spec
);
}
...
...
@@ -131,7 +148,8 @@ define([
var
target
,
search
=
{};
e
.
preventDefault
();
target
=
App
.
util
.
closest
(
e
.
target
,
"
a
"
).
getAttribute
(
"
href
"
).
split
(
"
?
"
)[
1
].
split
(
"
=
"
);
target
=
App
.
util
.
closest
(
e
.
target
,
"
a
"
)
.
getAttribute
(
"
href
"
).
split
(
"
?
"
)[
1
].
split
(
"
=
"
);
search
[
target
[
0
]]
=
target
[
1
];
// show this item
...
...
@@ -142,9 +160,9 @@ define([
});
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
var
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
,
true
);
});
...
...
@@ -160,4 +178,5 @@ define([
// return response object
return
that
;
}
);
);
modules/ui/login/login.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!login.html!strip
'
,
'
validval
'
,
'
css!login
'
],
function
(
App
,
source
,
validator
)
{
var
response
=
{};
'
app
'
,
'
text!login.html!strip
'
,
'
validval
'
,
'
css!login
'
],
function
(
App
,
source
)
{
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -28,4 +32,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/media/media.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!media.html!strip
'
,
'
css!media
'
],
'
app
'
,
'
text!media.html!strip
'
,
'
css!media
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/pagination/pagination.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global define: true, $: true, window: true, App: true, RenderJs: true,
document: true, define: true */
define
([
'
app
'
,
'
text!pagination.html!strip
'
,
'
css!pagination
'
],
'
app
'
,
'
text!pagination.html!strip
'
,
'
css!pagination
'
],
function
(
App
,
source
)
{
var
priv
=
{};
var
that
=
{};
"
use strict
"
;
var
priv
=
{},
that
=
{};
// get previous and next id
// TODO: this only works with id-numbers!!!
...
...
@@ -13,7 +18,7 @@ define([
// unless we want to get allDocs(includeDocs)
// TODO: this should receive the total number of results of a query/search!
priv
.
getPrevNextItem
=
function
(
arr
,
id
,
next
,
max
)
{
var
step
=
next
?
1
:
-
1
,
position
,
id
;
var
position
;
for
(
position
=
1
;
position
<=
max
;
position
+=
1
)
{
if
(
position
===
parseFloat
(
id
))
{
...
...
@@ -23,13 +28,12 @@ define([
return
false
;
}
return
arr
[
position
].
id
;
}
else
{
}
// less 1 is self, less 2 is previous...
if
(
arr
[
position
-
2
]
===
undefined
)
{
if
(
arr
[
position
-
2
]
===
undefined
)
{
return
false
;
}
return
arr
[
position
-
2
].
id
;
}
return
arr
[
position
-
2
].
id
;
}
}
};
...
...
@@ -53,39 +57,65 @@ define([
config
=
params
.
gadget
.
state
[
0
][
id
].
_config
,
module
=
config
.
datasource
.
module
;
var
spec
=
{};
spec
=
{};
spec
.
pointer
=
config
.
datasource
.
pointer
;
spec
.
method
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
method
||
"
allDocs
"
;
spec
.
storage
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
storage
||
"
items
"
;
spec
.
options
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
options
||
{
"
sort_on
"
:
[[
"
_id
"
,
"
ascending
"
]]
}
spec
.
method
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
method
||
"
allDocs
"
;
spec
.
storage
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
storage
||
"
items
"
;
spec
.
options
=
spec
.
pointer
?
undefined
:
config
.
datasource
.
options
||
{
"
sort_on
"
:
[[
"
_id
"
,
"
ascending
"
]]
};
spec
.
callback
=
function
(
err
,
response
)
{
var
currentId
=
location
.
href
.
split
(
"
?
"
)[
1
].
split
(
"
=
"
)[
1
],
var
next
,
prev
,
markup
,
currentId
=
window
.
location
.
href
.
split
(
"
?
"
)[
1
].
split
(
"
=
"
)[
1
],
identifier
=
App
.
settings
.
identifier
||
"
item_id
"
,
n
ext
,
prev
,
markup
;
n
ow
=
new
Date
().
getTime
()
;
// TODO: error handling
if
(
err
)
{
App
.
errors
.
push
([
"
pagination
"
,
now
,
err
]);
}
else
{
// set next
// TODO:
this is
bad, because we can only point to doc_id, no matter what
// TODO: bad, because we can only point to doc_id, no matter what
// identifier we are setting. item_id itself is... bad... fix!
next
=
priv
.
getPrevNextItem
(
response
.
rows
,
currentId
,
true
,
response
.
total_rows
);
next
=
priv
.
getPrevNextItem
(
response
.
rows
,
currentId
,
true
,
response
.
total_rows
);
if
(
!
next
)
{
markup
=
params
.
source
.
replace
(
"
translate next
"
,
"
translate next ui-state-disabled
"
);
markup
=
params
.
source
.
replace
(
"
translate next
"
,
"
translate next ui-state-disabled
"
);
}
else
{
markup
=
params
.
source
.
replace
(
identifier
+
"
=next
"
,
identifier
+
"
=
"
+
next
);
markup
=
params
.
source
.
replace
(
identifier
+
"
=next
"
,
identifier
+
"
=
"
+
next
);
}
// set previous
prev
=
priv
.
getPrevNextItem
(
response
.
rows
,
currentId
,
false
,
response
.
total_rows
);
prev
=
priv
.
getPrevNextItem
(
response
.
rows
,
currentId
,
false
,
response
.
total_rows
);
if
(
!
prev
)
{
markup
=
markup
.
replace
(
"
translate prev
"
,
"
translate prev ui-state-disabled
"
);
markup
=
markup
.
replace
(
"
translate prev
"
,
"
translate prev ui-state-disabled
"
);
}
else
{
markup
=
markup
.
replace
(
identifier
+
"
=prev
"
,
identifier
+
"
=
"
+
prev
);
markup
=
markup
.
replace
(
identifier
+
"
=prev
"
,
identifier
+
"
=
"
+
prev
);
}
}
params
.
callback_mockup
(
markup
);
...
...
@@ -95,8 +125,8 @@ define([
App
[
module
].
switchboard
(
spec
);
};
priv
.
setBindings
=
function
(
param
)
{
var
doc
=
$
(
document
);
//
priv.setBindings = function (param) {
//
var doc = $(document);
// doc
// .on("pagebeforeshow.browser", param.pageId, function (e) {
// console.log("pbs");
...
...
@@ -114,7 +144,7 @@ define([
// // changePage
// priv.displayItem(target);
// });
};
//
};
that
.
data
=
source
;
that
.
before
=
function
(
source
,
callback_mockup
)
{
...
...
@@ -124,21 +154,28 @@ define([
// TODO: this is for page event bindings. Once JQM content replaces
// page, remove this and make the gadget the content section to
// be updated.
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
page
=
App
.
util
.
closest
(
spec
.
gadget
.
dom
.
get
(
0
),
"
div[data-role='page']
"
);
spec
.
pageId
=
"
#
"
+
spec
.
page
.
id
;
spec
.
source
=
source
;
spec
.
callback_mockup
=
callback_mockup
;
if
(
!
spec
.
page
.
getAttribute
(
"
events_pagination
"
))
{
spec
.
page
.
setAttribute
(
"
events_pagination
"
,
true
);
$
(
document
).
on
(
"
pagebeforeshow.pagination
"
,
spec
.
pageId
,
function
(
e
,
data
)
{
$
(
document
).
on
(
"
pagebeforeshow.pagination
"
,
spec
.
pageId
,
function
()
{
// TODO: if we allow to reload, we also need to trigger refresh on
// so we need to reload this every time a page is shown. question
// is how to trigger a refresh on this element ONLY
// > the gadgets should tell whether they need enhancement!
// callback
priv
.
iterate
(
spec
);
});
}
);
// callback
priv
.
iterate
(
spec
);
...
...
@@ -147,22 +184,22 @@ define([
that
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
var
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
,
true
);
App
.
renderGadgets
(
gadget
);
});
window
.
fallbackLoader
.
deferreds
.
push
(
def
);
window
.
fallbackLoader
.
args
.
push
(
self
);
}
else
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
self
,
true
);
App
.
renderGadgets
(
self
);
}
};
// return response object
return
that
;
}
);
);
modules/ui/payment/payment.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!payment.html!strip
'
,
'
css!payment
'
],
'
app
'
,
'
text!payment.html!strip
'
,
'
css!payment
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
\ No newline at end of file
modules/ui/products/products.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!products.html!strip
'
,
'
css!products
'
],
'
app
'
,
'
text!products.html!strip
'
,
'
css!products
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
\ No newline at end of file
modules/ui/refine/refine.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!refine.html!strip
'
,
'
css!refine
'
],
'
app
'
,
'
text!refine.html!strip
'
,
'
css!refine
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
\ No newline at end of file
modules/ui/register/register.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!register.html!strip
'
,
'
css!register
'
],
'
app
'
,
'
text!register.html!strip
'
,
'
css!register
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
\ No newline at end of file
modules/ui/searchbar/searchbar.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global define: true, $: true, define: true, window: true, App: true,
RenderJs: true, document: true */
define
([
'
app
'
,
'
text!searchbar.html!strip
'
,
'
css!searchbar
'
],
'
app
'
,
'
text!searchbar.html!strip
'
,
'
css!searchbar
'
],
function
(
App
,
source
)
{
"
use strict
"
;
var
response
=
{};
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
var
filter
=
self
.
dom
.
find
(
"
.searchbar_filter
"
)
,
value
,
runSearch
;
var
runSearch
,
def
,
filter
=
self
.
dom
.
find
(
"
.searchbar_filter
"
)
;
runSearch
=
function
(
value
)
{
$
.
mobile
.
changePage
(
"
products.html
"
,
{
$
.
mobile
.
changePage
(
"
products.html
"
,
{
"
transition
"
:
"
slide
"
,
"
allowSamePageTransition
"
:
true
,
"
data
"
:
{
...
...
@@ -21,12 +26,13 @@ define([
});
};
filter
.
on
(
"
filterablebeforefilter
"
,
function
(
e
,
data
)
{
value
=
data
.
input
.
value
;
filter
.
on
(
"
filterablebeforefilter
"
,
function
(
e
)
{
// TODO: add back data
// var value = data.input.value;
// stop JQM
e
.
preventDefault
();
if
(
value
)
{
//if (value
) {
// now we can autocomplete...
// this should also run from JIO
// whatever happens should take into account presets
...
...
@@ -45,23 +51,23 @@ define([
// rest must be stored in an attachment.
// and jIO
}
//
}
})
.
on
(
"
filterablecreate
"
,
function
(
e
,
ui
)
{
var
$el
=
$
(
e
.
target
.
previousSibling
),
.
on
(
"
filterablecreate
"
,
function
(
e
)
{
var
$el
=
$
(
e
.
target
.
previousSibling
),
input
=
$el
.
find
(
"
input
"
),
action
=
$el
.
find
(
"
a.ui-input-action
"
);
// TODO: search should be run here and results should be passed to
// items or ?. Otherwise items has to listen for ... something, grab
// data from somewhere and query. This makes more sense here.
action
.
on
(
"
click
"
,
function
(
e
)
{
action
.
on
(
"
click
"
,
function
(
)
{
runSearch
(
input
.
val
());
});
input
.
on
(
"
keypress
"
,
function
(
e
)
{
if
(
e
.
which
==
13
)
{
if
(
e
.
which
=
==
13
)
{
e
.
preventDefault
();
runSearch
(
input
.
val
());
}
...
...
@@ -71,9 +77,9 @@ define([
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -89,4 +95,5 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/seo/seo.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!seo.html!strip
'
,
'
css!seo
'
],
'
app
'
,
'
text!seo.html!strip
'
,
'
css!seo
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/shipment/shipment.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!shipment.html!strip
'
,
'
css!shipment
'
],
'
app
'
,
'
text!shipment.html!strip
'
,
'
css!shipment
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/sorting/sorting.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!sorting.html!strip
'
,
'
css!sorting
'
],
'
app
'
,
'
text!sorting.html!strip
'
,
'
css!sorting
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/summary/summary.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!summary.html!strip
'
,
'
css!summary
'
],
'
app
'
,
'
text!summary.html!strip
'
,
'
css!summary
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/teaser/teaser.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!teaser.html!strip
'
,
'
css!teaser
'
],
'
app
'
,
'
text!teaser.html!strip
'
,
'
css!teaser
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/terms/terms.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80 */
/*global define: true, define: true, $: true, window: true */
define
([
'
app
'
,
'
text!terms.html!strip
'
,
'
css!terms
'
],
'
app
'
,
'
text!terms.html!strip
'
,
'
css!terms
'
],
function
(
App
,
source
)
{
var
response
=
{};
"
use strict
"
;
var
response
=
{},
def
;
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
App
.
renderGadgets
(
gadget
);
});
...
...
@@ -27,4 +31,4 @@ define([
// return response object
return
response
;
}
);
);
modules/ui/translate/translate.js
View file @
0ea54899
/*jslint indent: 2, maxlen: 80, nomen: true */
/*global define: true, $: true, define: true, window: true, App: true,
RenderJs: true, document: true */
define
([
'
app
'
,
'
text!translate.html!strip
'
,
'
css!translate
'
],
'
app
'
,
'
text!translate.html!strip
'
,
'
css!translate
'
],
function
(
App
,
source
)
{
"
use strict
"
;
var
response
=
{};
response
.
data
=
source
;
response
.
after
=
function
(
self
)
{
var
that
=
{};
var
priv
=
{};
var
def
;
var
priv
=
{},
def
;
// ====================================================================
// ATTRIBUTES
...
...
@@ -36,7 +40,7 @@ define([
//
priv
.
prefixId
=
function
(
id
,
gadget
)
{
return
gadget
.
dom
.
attr
(
'
id
'
)
+
"
__
"
+
id
;
}
}
;
//
// modify the icon of the popup button
...
...
@@ -44,13 +48,13 @@ define([
// @param {object} gadget > gadget object
// @param {string} icon > class name for icon
//
priv
.
setIcon
=
function
(
gadget
,
language
)
{
priv
.
setIcon
=
function
(
language
)
{
// TODO: remove setTimeout!
window
.
setTimeout
(
function
()
{
window
.
setTimeout
(
function
()
{
$
(
"
.pick_language
"
)
.
removeClass
(
"
[class|='ui-icon']
"
)
.
addClass
(
"
ui-icon-
"
+
language
);
},
50
);
},
50
);
};
//
...
...
@@ -58,7 +62,7 @@ define([
// @method translate
// @param {string} language > language to set
//
priv
.
translate
=
function
(
language
,
target
)
{
priv
.
translate
=
function
(
target
)
{
var
collection
=
target
||
$
(
'
body
'
);
collection
.
find
(
"
.
"
+
App
.
settings
.
language_selector
).
i18n
();
};
...
...
@@ -78,11 +82,11 @@ define([
"
resGetPath
"
:
'
lang/__lng__/__ns__.json
'
,
"
ns
"
:
'
app
'
},
function
()
{
priv
.
translate
(
language
);
priv
.
translate
();
});
App
.
settings
.
language_set
=
"
true
"
;
}
else
{
priv
.
translate
(
language
);
priv
.
translate
();
}
};
...
...
@@ -99,25 +103,24 @@ define([
priv
.
setIcon
(
language
);
};
// ====================================================================
====
// ====================================================================
// BINDINGS
// ====================================================================
====
// ====================================================================
// TODO: remove once callable per link!
// TODO: why do I need to call $.i18n.setLng again?
priv
.
doc
.
on
(
"
ready
"
,
function
()
{
var
that
=
$
(
this
);
that
.
filter
(
function
()
{
that
.
filter
(
function
()
{
return
that
.
attr
(
"
i18n
"
)
!==
"
set
"
;
})
.
attr
(
"
i18n
"
,
"
set
"
)
.
on
(
"
click
"
,
"
a.change_language
"
,
function
(
e
)
{
var
language
=
this
.
getAttribute
(
"
href
"
).
replace
(
'
?lang=
'
,
''
);
var
language
=
this
.
getAttribute
(
"
href
"
).
replace
(
'
?lang=
'
,
''
);
e
.
preventDefault
();
e
.
stopPropagation
();
$
(
"
.popup_all
"
).
popup
(
'
close
'
);
$
(
"
.popup_all
"
).
popup
(
"
close
"
);
if
(
App
.
settings
.
language_current
!==
language
)
{
// update language
...
...
@@ -127,7 +130,7 @@ define([
priv
.
setIcon
(
language
);
// translate
$
.
i18n
.
setLng
(
language
,
function
()
{
$
.
i18n
.
setLng
(
language
,
function
()
{
priv
.
setTranslations
(
language
);
});
}
...
...
@@ -139,7 +142,6 @@ define([
// PUBLISH METHODS
// ====================================================================
// TODO: remove once callable via link
// TODO: can I add methods to a module, when accessing the module from another module???
App
.
translate
=
priv
.
translate
;
// prefix instance-ids, pass JSON, trigger("create")
...
...
@@ -152,11 +154,11 @@ define([
};
if
(
App
===
undefined
)
{
def
=
new
$
.
Deferred
;
def
=
new
$
.
Deferred
()
;
def
.
done
(
function
(
gadget
)
{
def
.
done
(
function
(
gadget
)
{
// prefix instance-ids, pass JSON
priv
.
deferred_setup_translations
(
gadget
)
priv
.
deferred_setup_translations
(
gadget
)
;
});
window
.
fallbackLoader
.
deferreds
.
push
(
def
);
...
...
@@ -165,9 +167,9 @@ define([
// prefix instance-ids, pass JSON
priv
.
deferred_setup_translations
(
priv
.
gadget
);
}
}
}
;
// return response object
return
response
;
}
);
);
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