Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F886582
PicasaStore.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
PicasaStore.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojox.data.PicasaStore"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojox.data.PicasaStore"
]
=
true
;
dojo
.
provide
(
"dojox.data.PicasaStore"
);
dojo
.
require
(
"dojo.data.util.simpleFetch"
);
dojo
.
require
(
"dojo.io.script"
);
dojo
.
require
(
"dojo.date.stamp"
);
dojo
.
declare
(
"dojox.data.PicasaStore"
,
null
,
{
constructor
:
function
(
/*Object*/
args
){
// summary:
// Initializer for the PicasaStore store.
// description:
// The PicasaStore is a Datastore interface to one of the basic services
// of the Picasa service, the public photo feed. This does not provide
// access to all the services of Picasa.
// This store cannot do * and ? filtering as the picasa service
// provides no interface for wildcards.
if
(
args
&&
args
.
label
){
this
.
label
=
args
.
label
;
}
},
_picasaUrl
:
"http://picasaweb.google.com/data/feed/api/all"
,
_storeRef
:
"_S"
,
label
:
"title"
,
_assertIsItem
:
function
(
/* item */
item
){
// summary:
// This function tests whether the item passed in is indeed an item in the store.
// item:
// The item to test for being contained by the store.
if
(
!
this
.
isItem
(
item
)){
throw
new
Error
(
"dojox.data.PicasaStore: a function was passed an item argument that was not an item"
);
}
},
_assertIsAttribute
:
function
(
/* attribute-name-string */
attribute
){
// summary:
// This function tests whether the item passed in is indeed a valid 'attribute' like type for the store.
// attribute:
// The attribute to test for being contained by the store.
if
(
typeof
attribute
!==
"string"
){
throw
new
Error
(
"dojox.data.PicasaStore: a function was passed an attribute argument that was not an attribute name string"
);
}
},
getFeatures
:
function
(){
// summary:
// See dojo.data.api.Read.getFeatures()
return
{
'dojo.data.api.Read'
:
true
};
},
getValue
:
function
(
item
,
attribute
){
// summary:
// See dojo.data.api.Read.getValue()
var
values
=
this
.
getValues
(
item
,
attribute
);
if
(
values
){
return
values
[
0
];
}
return
undefined
;
},
getAttributes
:
function
(
item
){
// summary:
// See dojo.data.api.Read.getAttributes()
return
[
"id"
,
"published"
,
"updated"
,
"category"
,
"title$type"
,
"title"
,
"summary$type"
,
"summary"
,
"rights$type"
,
"rights"
,
"link"
,
"author"
,
"gphoto$id"
,
"gphoto$name"
,
"location"
];
},
hasAttribute
:
function
(
item
,
attribute
){
// summary:
// See dojo.data.api.Read.hasAttributes()
if
(
this
.
getValue
(
item
,
attribute
)){
return
true
;
}
return
false
;
},
isItemLoaded
:
function
(
item
){
// summary:
// See dojo.data.api.Read.isItemLoaded()
return
this
.
isItem
(
item
);
},
loadItem
:
function
(
keywordArgs
){
// summary:
// See dojo.data.api.Read.loadItem()
},
getLabel
:
function
(
item
){
// summary:
// See dojo.data.api.Read.getLabel()
return
this
.
getValue
(
item
,
this
.
label
);
},
getLabelAttributes
:
function
(
item
){
// summary:
// See dojo.data.api.Read.getLabelAttributes()
return
[
this
.
label
];
},
containsValue
:
function
(
item
,
attribute
,
value
){
// summary:
// See dojo.data.api.Read.containsValue()
var
values
=
this
.
getValues
(
item
,
attribute
);
for
(
var
i
=
0
;
i
<
values
.
length
;
i
++
){
if
(
values
[
i
]
===
value
){
return
true
;
}
}
return
false
;
},
getValues
:
function
(
item
,
attribute
){
// summary:
// See dojo.data.api.Read.getValue()
this
.
_assertIsItem
(
item
);
this
.
_assertIsAttribute
(
attribute
);
if
(
attribute
===
"title"
){
return
[
this
.
_unescapeHtml
(
item
.
title
)];
}
else
if
(
attribute
===
"author"
){
return
[
this
.
_unescapeHtml
(
item
.
author
[
0
].
name
)];
}
else
if
(
attribute
===
"datePublished"
){
return
[
dojo
.
date
.
stamp
.
fromISOString
(
item
.
published
)];
}
else
if
(
attribute
===
"dateTaken"
){
return
[
dojo
.
date
.
stamp
.
fromISOString
(
item
.
date_taken
)];
}
else
if
(
attribute
===
"imageUrlSmall"
){
return
[
item
.
media
.
thumbnail
[
1
].
url
];
}
else
if
(
attribute
===
"imageUrl"
){
return
[
item
.
content$src
];
}
else
if
(
attribute
===
"imageUrlMedium"
){
return
[
item
.
media
.
thumbnail
[
2
].
url
];
}
else
if
(
attribute
===
"link"
){
return
[
item
.
link
[
1
]];
}
else
if
(
attribute
===
"tags"
){
return
item
.
tags
.
split
(
" "
);
}
else
if
(
attribute
===
"description"
){
return
[
this
.
_unescapeHtml
(
item
.
summary
)];
}
return
undefined
;
},
isItem
:
function
(
item
){
// summary:
// See dojo.data.api.Read.isItem()
if
(
item
&&
item
[
this
.
_storeRef
]
===
this
){
return
true
;
}
return
false
;
},
close
:
function
(
request
){
// summary:
// See dojo.data.api.Read.close()
},
_fetchItems
:
function
(
request
,
fetchHandler
,
errorHandler
){
// summary:
// Fetch picasa items that match to a query
// request:
// A request object
// fetchHandler:
// A function to call for fetched items
// errorHandler:
// A function to call on error
if
(
!
request
.
query
){
request
.
query
=
{};
}
//Build up the content to send the request for.
var
content
=
{
alt
:
"jsonm"
,
pp
:
"1"
,
psc
:
"G"
};
content
[
'start-index'
]
=
"1"
;
if
(
request
.
query
.
start
){
content
[
'start-index'
]
=
request
.
query
.
start
;
}
if
(
request
.
query
.
tags
){
content
.
q
=
request
.
query
.
tags
;
}
if
(
request
.
query
.
userid
){
content
.
uname
=
request
.
query
.
userid
;
}
if
(
request
.
query
.
userids
){
content
.
ids
=
request
.
query
.
userids
;
}
if
(
request
.
query
.
lang
){
content
.
hl
=
request
.
query
.
lang
;
}
if
(
request
.
count
){
content
[
'max-results'
]
=
request
.
count
;
}
else
{
content
[
'max-results'
]
=
"20"
;
}
//Linking this up to Picasa is a JOY!
var
self
=
this
;
var
handle
=
null
;
var
myHandler
=
function
(
data
){
if
(
handle
!==
null
){
dojo
.
disconnect
(
handle
);
}
//Process the items...
fetchHandler
(
self
.
_processPicasaData
(
data
),
request
);
};
var
getArgs
=
{
url
:
this
.
_picasaUrl
,
// preventCache: true,
content
:
content
,
callbackParamName
:
'callback'
,
handle
:
myHandler
};
var
deferred
=
dojo
.
io
.
script
.
get
(
getArgs
);
deferred
.
addErrback
(
function
(
error
){
dojo
.
disconnect
(
handle
);
errorHandler
(
error
,
request
);
});
},
_processPicasaData
:
function
(
data
){
var
items
=
[];
if
(
data
.
feed
){
items
=
data
.
feed
.
entry
;
//Add on the store ref so that isItem can work.
for
(
var
i
=
0
;
i
<
items
.
length
;
i
++
){
var
item
=
items
[
i
];
item
[
this
.
_storeRef
]
=
this
;
}
}
return
items
;
},
_unescapeHtml
:
function
(
str
){
// summary: Utility function to un-escape XML special characters in an HTML string.
// description: Utility function to un-escape XML special characters in an HTML string.
// str: String.
// The string to un-escape
// returns: HTML String converted back to the normal text (unescaped) characters (<,>,&, ", etc,).
//
//TODO: Check to see if theres already compatible escape() in dojo.string or dojo.html
str
=
str
.
replace
(
/&/gm
,
"&"
).
replace
(
/</gm
,
"<"
).
replace
(
/>/gm
,
">"
).
replace
(
/"/gm
,
"\""
);
str
=
str
.
replace
(
/'/gm
,
"'"
);
return
str
;
}
});
dojo
.
extend
(
dojox
.
data
.
PicasaStore
,
dojo
.
data
.
util
.
simpleFetch
);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 7, 02:42 (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24601
Default Alt Text
PicasaStore.js (6 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment