summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/js/htdocs/atomutil.js
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/trunk/modules/js/htdocs/atomutil.js')
-rw-r--r--sca-cpp/trunk/modules/js/htdocs/atomutil.js98
1 files changed, 39 insertions, 59 deletions
diff --git a/sca-cpp/trunk/modules/js/htdocs/atomutil.js b/sca-cpp/trunk/modules/js/htdocs/atomutil.js
index 21aa16e0fc..182b698596 100644
--- a/sca-cpp/trunk/modules/js/htdocs/atomutil.js
+++ b/sca-cpp/trunk/modules/js/htdocs/atomutil.js
@@ -25,22 +25,23 @@ var atom = {};
/**
* Convert a list of elements to a list of values representing an ATOM entry.
*/
-atom.entryElementsToValues = function(e) {
+atom.entryElementValues = function(e) {
var lt = filter(selector(mklist(element, "'title")), e);
var t = isNil(lt)? '' : elementValue(car(lt));
var li = filter(selector(mklist(element, "'id")), e);
var i = isNil(li)? '' : elementValue(car(li));
var lc = filter(selector(mklist(element, "'content")), e);
- return mklist(t, i, elementValue(car(lc)));
+ return append(mklist(element, "'entry", mklist(element, "'title", t), mklist(element, "'id", i)),
+ isNil(lc)? mklist() : mklist(mklist(element, "'content", elementValue(car(lc)))))
};
/**
* Convert a list of elements to a list of values representing ATOM entries.
*/
-atom.entriesElementsToValues = function(e) {
+atom.entriesElementValues = function(e) {
if (isNil(e))
return e;
- return cons(atom.entryElementsToValues(car(e)), atom.entriesElementsToValues(cdr(e)));
+ return cons(atom.entryElementValues(car(e)), atom.entriesElementValues(cdr(e)));
};
/**
@@ -59,7 +60,7 @@ atom.readATOMEntryDocument = function(doc) {
var e = readXMLDocument(doc);
if (isNil(e))
return mklist();
- return atom.entryElementsToValues(car(e));
+ return mklist(atom.entryElementValues(car(e)));
};
/**
@@ -70,14 +71,6 @@ atom.readATOMEntry = function(l) {
};
/**
- * Convert a list of values representy an ATOM entry to a value.
- */
-atom.entryValue = function(e) {
- var v = elementsToValues(mklist(caddr(e)));
- return cons(car(e), (cadr(e), cdr(car(v))));
-};
-
-/**
* Return true if a list of strings represents an ATOM feed.
*/
atom.isATOMFeed = function(l) {
@@ -96,40 +89,32 @@ atom.readATOMFeedDocument = function(doc) {
var t = filter(selector(mklist(element, "'title")), car(f));
var i = filter(selector(mklist(element, "'id")), car(f));
var e = filter(selector(mklist(element, "'entry")), car(f));
- if (isNil(e))
- return mklist(elementValue(car(t)), elementValue(car(i)));
- return cons(elementValue(car(t)), cons(elementValue(car(i)), atom.entriesElementsToValues(e)));
+ return mklist(append(
+ mklist(element, "'feed", mklist(element, "'title", elementValue(car(t))), mklist(element, "'id", elementValue(car(i)))),
+ atom.entriesElementValues(e)));
};
/**
* Convert a list of strings to a list of values representing an ATOM feed.
*/
atom.readATOMFeed = function(l) {
- return atom.readAtomFeedDocument(parseXML(l));
-};
-
-/**
- * Convert an ATOM feed containing elements to an ATOM feed containing values.
- */
-atom.feedValues = function(e) {
- function feedValuesLoop(e) {
- if (isNil(e))
- return e;
- return cons(entryValue(car(e)), feedValuesLoop(cdr(e)));
- }
-
- return cons(car(e), cons(cadr(e), feedValuesLoop(cddr(e))));
+ return atom.readATOMFeedDocument(parseXML(l));
};
/**
* Convert a list of values representy an ATOM entry to a list of elements.
*/
atom.entryElement = function(l) {
- return mklist(element, "'entry", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
- mklist(element, "'title", mklist(attribute, "'type", "text"), car(l)),
- mklist(element, "'id", cadr(l)),
- mklist(element, "'content", mklist(attribute, "'type", (isList(caddr(l))? "application/xml" : "text")), caddr(l)),
- mklist(element, "'link", mklist(attribute, "'href", cadr(l))));
+ var title = elementValue(namedElementChild("'title", l));
+ var id = elementValue(namedElementChild("'id", l));
+ var content = namedElementChild("'content", l);
+ var text = isNil(content)? false : elementHasValue(content);
+ return append(append(
+ mklist(element, "'entry", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
+ mklist(element, "'title", mklist(attribute, "'type", "text"), title), mklist(element, "'id", id)),
+ isNil(content)? mklist() :
+ append(mklist(element, "'content", mklist(attribute, "'type", text? "text" : "application/xml")), text? mklist(elementValue(content)) : elementChildren(content))),
+ mklist(element, "'link", mklist(attribute, "'href", id)));
};
/**
@@ -144,42 +129,37 @@ atom.entriesElements = function(l) {
/**
* Convert a list of values representing an ATOM entry to an ATOM entry.
*/
-atom.writeATOMEntry = function(l) {
+atom.writeATOMEntry = function(ll) {
+ var l = isNil(ll)? ll : car(ll);
return writeXML(mklist(atom.entryElement(l)), true);
};
/**
* Convert a list of values representing an ATOM feed to an ATOM feed.
*/
-atom.writeATOMFeed = function(l) {
+atom.writeATOMFeed = function(ll) {
+ var l = isNil(ll)? ll : car(ll);
+ var lt = filter(selector(mklist(element, "'title")), l);
+ var t = isNil(lt)? '' : elementValue(car(lt));
+ var li = filter(selector(mklist(element, "'id")), l);
+ var i = isNil(li)? '' : elementValue(car(li));
var f = mklist(element, "'feed", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
mklist(element, "'title", mklist(attribute, "'type", "text"), car(l)),
mklist(element, "'id", cadr(l)));
- if (isNil(cddr(l)))
- return writeXML(mklist(f), true);
- var fe = append(f, atom.entriesElements(cddr(l)));
- return writeXML(mklist(fe), true);
-};
-/**
- * Convert an ATOM entry containing a value to an ATOM entry containing an item element.
- */
-atom.entryValuesToElements = function(v) {
- if (isList(caddr(v)))
- return cons(car(v), cons(cadr(v), valuesToElements(mklist(cons("'item", caddr(v))))));
- return cons(car(v), cons(cadr(v), valuesToElements(mklist(mklist("'item", caddr(v))))));
-};
+ // Write ATOM entries
+ var le = filter(selector(mklist(element, "'entry")), l);
+ if (isNil(le))
+ return writeXML(mklist(f), true);
-/**
- * Convert an ATOM feed containing values to an ATOM feed containing elements.
- */
-atom.feedValuesToElements = function(v) {
- function feedValuesToElementsLoop(v) {
- if (isNil(v))
- return v;
- return cons(atom.entryValuesToElements(car(v)), feedValuesToElementsLoop(cdr(v)));
+ // Write a single ATOM entry element with a list of values
+ if (!isNil(le) && !isNil(car(le)) && isList(car(caddr(car(le))))) {
+ var fe = append(f, atom.entriesElements(caddr(car(le))));
+ return writeXML(mklist(fe), true);
}
- return cons(car(v), cons(cadr(v), feedValuesToElementsLoop(cddr(v))));
+ // Write separate ATOM entry elements
+ var fe = append(f, atom.entriesElements(le));
+ return writeXML(mklist(fe), true);
};