Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F1126616
FlickrStore.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Subscribers
None
FlickrStore.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojox.data.FlickrStore"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojox.data.FlickrStore"
]
=
true
;
dojo
.
provide
(
"dojox.data.FlickrStore"
);
dojo
.
require
(
"dojo.data.util.simpleFetch"
);
dojo
.
require
(
"dojo.io.script"
);
dojo
.
require
(
"dojo.date.stamp"
);
dojo
.
declare
(
"dojox.data.FlickrStore"
,
null
,
{
constructor
:
function
(
/*Object*/
args
){
// summary:
// Initializer for the FlickrStore store.
// description:
// The FlickrStore is a Datastore interface to one of the basic services
// of the Flickr service, the public photo feed. This does not provide
// access to all the services of Flickr.
// This store cannot do * and ? filtering as the flickr service
// provides no interface for wildcards.
if
(
args
&&
args
.
label
){
this
.
label
=
args
.
label
;
}
},
_flickrUrl
:
"http://api.flickr.com/services/feeds/photos_public.gne"
,
_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.FlickrStore: 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.FlickrStore: 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
[
"title"
,
"description"
,
"author"
,
"datePublished"
,
"dateTaken"
,
"imageUrl"
,
"imageUrlSmall"
,
"imageUrlMedium"
,
"tags"
,
"link"
];
},
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
)];
}
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
.
m
.
replace
(
/_m\./
,
"_s."
)];
}
else
if
(
attribute
===
"imageUrl"
){
return
[
item
.
media
.
m
.
replace
(
/_m\./
,
"."
)];
}
else
if
(
attribute
===
"imageUrlMedium"
){
return
[
item
.
media
.
m
];
}
else
if
(
attribute
===
"link"
){
return
[
item
.
link
];
}
else
if
(
attribute
===
"tags"
){
return
item
.
tags
.
split
(
" "
);
}
else
if
(
attribute
===
"description"
){
return
[
this
.
_unescapeHtml
(
item
.
description
)];
}
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 flickr 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
=
{
format
:
"json"
,
tagmode
:
"any"
};
if
(
request
.
query
.
tags
)
{
content
.
tags
=
request
.
query
.
tags
;
}
if
(
request
.
query
.
tagmode
)
{
content
.
tagmode
=
request
.
query
.
tagmode
;
}
if
(
request
.
query
.
userid
)
{
content
.
id
=
request
.
query
.
userid
;
}
if
(
request
.
query
.
userids
)
{
content
.
ids
=
request
.
query
.
userids
;
}
if
(
request
.
query
.
lang
)
{
content
.
lang
=
request
.
query
.
lang
;
}
//Linking this up to Flickr is a PAIN!
var
self
=
this
;
var
handle
=
null
;
var
getArgs
=
{
url
:
this
.
_flickrUrl
,
preventCache
:
true
,
content
:
content
};
var
myHandler
=
function
(
data
){
if
(
handle
!==
null
){
dojo
.
disconnect
(
handle
);
}
//Process the items...
fetchHandler
(
self
.
_processFlickrData
(
data
),
request
);
};
handle
=
dojo
.
connect
(
"jsonFlickrFeed"
,
myHandler
);
var
deferred
=
dojo
.
io
.
script
.
get
(
getArgs
);
//We only set up the errback, because the callback isn't ever really used because we have
//to link to the jsonFlickrFeed function....
deferred
.
addErrback
(
function
(
error
){
dojo
.
disconnect
(
handle
);
errorHandler
(
error
,
request
);
});
},
_processFlickrData
:
function
(
data
){
var
items
=
[];
if
(
data
.
items
){
items
=
data
.
items
;
//Add on the store ref so that isItem can work.
for
(
var
i
=
0
;
i
<
data
.
items
.
length
;
i
++
){
var
item
=
data
.
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
.
FlickrStore
,
dojo
.
data
.
util
.
simpleFetch
);
//We have to define this because of how the Flickr API works.
//This somewhat stinks, but what can you do?
if
(
!
jsonFlickrFeed
)
{
var
jsonFlickrFeed
=
function
(
data
){};
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jun 18, 19:56 (3 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25058
Default Alt Text
FlickrStore.js (7 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment