[Gd-chatter] r10832 - trunk/libraries/web-framework
turbo24prg at gwydiondylan.org
turbo24prg at gwydiondylan.org
Wed Jul 26 01:44:02 CEST 2006
Author: turbo24prg
Date: Wed Jul 26 01:44:00 2006
New Revision: 10832
Modified:
trunk/libraries/web-framework/changes.dylan
trunk/libraries/web-framework/library.dylan
trunk/libraries/web-framework/users.dylan
trunk/libraries/web-framework/web-framework.lid
Log:
Job: minor
* some ugly improvements
Modified: trunk/libraries/web-framework/changes.dylan
==============================================================================
--- trunk/libraries/web-framework/changes.dylan (original)
+++ trunk/libraries/web-framework/changes.dylan Wed Jul 26 01:44:00 2006
@@ -3,36 +3,69 @@
define class <feed> (<object>)
/* slot CommonAttributes */
- slot author :: <list>, init-keyword: author:;
- slot category :: <list> = #(), init-keyword: category:;
- slot contributor :: <list> = #(), init-keyword: contributor:;
- slot generator :: false-or(<generator>) = #f, init-keyword: generator:;
- slot icon :: false-or(<uri>) = #f, init-keyword: icon:;
- slot identifier :: <uri>, init-keyword: identifier:;
- slot link :: <list> = #(), init-keyword: link:;
- slot logo :: false-or(<uri>) = #f, init-keyword: logo:;
- slot rights :: false-or(<text>) = #f, init-keyword: rights:;
- slot subtitle :: false-or(<text>) = #f, init-keyword: subtitle:;
- slot title :: <text>, init-keyword: title:;
- slot updated :: <date>, init-keyword: updated:;
+ slot authors :: <list>,
+ init-keyword: authors:;
+ slot categories :: <list> = #(),
+ init-keyword: categories:;
+ slot contributors :: <list> = #(),
+ init-keyword: contributors:;
+ slot generator :: false-or(<generator>) = #f,
+ init-keyword: generator:;
+ slot icon :: false-or(<uri>) = #f,
+ init-keyword: icon:;
+ slot identifier :: <uri>,
+ init-keyword: identifier:;
+ slot links :: <list> = #(),
+ init-keyword: links:;
+ slot logo :: false-or(<uri>) = #f,
+ init-keyword: logo:;
+ slot rights :: false-or(<text>) = #f,
+ init-keyword: rights:;
+ slot subtitle :: false-or(<text>) = #f,
+ init-keyword: subtitle:;
+ slot title :: <text>,
+ init-keyword: title:;
+ slot updated :: <date>,
+ init-keyword: updated:;
/* repeated slot extensionElement */
- slot entry :: <list> = #(), init-keyword: entry:;
+ slot entries :: <list> = #(),
+ init-keyword: entries:;
+ slot language :: <text>,
+ init-keyword: language:;
+ slot description :: <text>,
+ init-keyword: description:;
+ slot published :: <date>,
+ init-keyword: published:;
end;
-define class <entry> (<object>)
+define open class <entry> (<object>)
/* slot CommonAttributes */
- slot author :: <list> = #(), init-keyword: author:;
- slot category :: <list> = #(), init-keyword: category:;
- slot content :: false-or(<content>) = #f, init-keyword: content:;
- slot contributor :: <list> = #(), init-keyword: contributor:;
- slot identifier :: <uri>, init-keyword: identifier:;
- slot link :: <list> = #(), init-keyword: link:;
- slot published :: false-or(<date>) = #f, init-keyword: published:;
- slot rights :: false-or(<text>) = #f, init-keyword: rights:;
- slot source :: false-or(<source>) = #f, init-keyword: source:;
- slot summary :: false-or(<text>) = #f, init-keyword: summary:;
- slot title :: <text>, init-keyword: title:;
- slot updated :: <date>, init-keyword: updated:;
+ slot authors :: <list> = #(),
+ init-keyword: authors:;
+ slot categories :: <list> = #(),
+ init-keyword: categories:;
+ slot content :: false-or(<content>) = #f,
+ init-keyword: content:;
+ slot contributors :: <list> = #(),
+ init-keyword: contributors:;
+ slot identifier :: <uri>,
+ init-keyword: identifier:;
+ slot links :: <list> = #(),
+ init-keyword: links:;
+ slot published :: <date>,
+ init-keyword: published:;
+ slot rights :: false-or(<text>) = #f,
+ init-keyword: rights:;
+ slot source :: false-or(<source>) = #f,
+ init-keyword: source:;
+ slot summary :: false-or(<text>) = #f,
+ init-keyword: summary:;
+ slot title :: <text>,
+ init-keyword: title:;
+ slot updated :: false-or(<date>) = #f,
+ init-keyword: updated:;
+ slot comments :: <list> = #(),
+ init-keyword: comments:;
/* repeated slot extensionElement */
end;
@@ -42,6 +75,11 @@
slot content :: <text>, init-keyword: content:;
end;
+define class <raw-content> (<content>)
+ inherited slot type :: <string> = "raw";
+end class <raw-content>;
+
+/*
define class <inline-text-content> (<content>)
inherited slot content :: <text>, init-keyword: content:;
end;
@@ -57,20 +95,22 @@
define class <out-of-line-content> (<content>)
inherited slot content :: <source>, init-keyword: content:;
end;
-
+*/
define class <person> (<object>)
slot person-name :: <text>, init-keyword: name:;
slot uri :: false-or(<uri>) = #f, init-keyword: uri:;
slot email :: false-or(<email>) = #f, init-keyword: email:;
end;
-define class <date> (<object>)
-end;
-
define class <category> (<object>)
- slot term :: <text>, init-keyword: term:;
- slot scheme :: false-or(<uri>) = #f, init-keyword: scheme:;
- slot label :: false-or(<text>) = #f, init-keyword: label:;
+ slot term :: <text>,
+ init-keyword: term:;
+ slot scheme :: false-or(<uri>) = #f,
+ init-keyword: scheme:;
+ slot label :: false-or(<text>) = #f,
+ init-keyword: label:;
+ slot description :: false-or(<text>) = #f,
+ init-keyword: description:;
end;
define constant <text> = <string>;
@@ -84,7 +124,8 @@
define class <generator> (<object>)
slot uri :: false-or(<uri>) = #f, init-keyword: uri:;
- slot version :: false-or(<text>) = #f, init-keyword: version:;
+ slot system-version :: false-or(<text>) = #f,
+ init-keyword: version:;
slot text :: <text>, init-keyword: text:;
end;
@@ -99,12 +140,47 @@
define constant <source> = <feed>;
+// RSS
+define generic generate-rss (object :: <object>);
+define method generate-rss (feed :: <feed>)
+ with-xml-builder()
+ rss (version => "2.0") {
+ channel {
+ title(feed.title),
+ link(first(feed.links)),
+ description(feed.description),
+ language(feed.language),
+ copyright(feed.rights),
+ pubDate(as-iso8601-string(feed.published)),
+ image {
+ url(feed.logo),
+ title(feed.title),
+ link(first(feed.links))
+ },
+ do(do(method(entry) collect(generate-rss(entry)) end, feed.entries))
+ }
+ }
+ end;
+end method generate-rss;
+
+define method generate-rss (entry :: <entry>)
+ with-xml()
+ item {
+ title(entry.title),
+ description(entry.content.content),
+ link(entry.identifier),
+ author("food00d")
+ }
+ end;
+end method generate-rss;
+
+
define method generate-xhtml (feed :: <feed>)
with-xml()
div {
h1(concatenate("Recent changes: ", feed.title)),
text(feed.subtitle),
- ul { do(do(method(x) collect(generate-xhtml(x)) end, feed.entry)) }
+ ul { do(do(method(x) collect(generate-xhtml(x)) end, feed.entries)) }
}
end;
end;
@@ -114,8 +190,8 @@
li {
do(collect(generate-xhtml(entry.updated))),
text(entry.title), //link to content
- do(do(method(x) collect(generate-xhtml(x)) end, entry.author))
- //link to each author
+// do(do(method(x) collect(generate-xhtml(x)) end, entry.authors))
+//link to each author
}
end;
end;
@@ -134,10 +210,10 @@
subtitle(feed.subtitle),
updated { do(collect(generate-atom(feed.updated))) },
id(feed.identifier),
- do(do(method(x) collect(generate-atom(x)) end, feed.link)),
+ do(do(method(x) collect(generate-atom(x)) end, feed.links)),
rights(feed.rights),
do(collect(generate-atom(feed.generator))),
- do(do(method(x) collect(generate-atom(x)) end, feed.entry))
+ do(do(method(x) collect(generate-atom(x)) end, feed.entries))
} //missing: category, contributor, icon, logo
end;
end;
@@ -160,7 +236,7 @@
define method generate-atom (generator :: <generator>)
with-xml()
- generator (uri => generator.uri, version => generator.version)
+ generator (uri => generator.uri, version => generator.system-version)
{
text(generator.text)
}
@@ -172,12 +248,12 @@
entry
{
title(entry.title),
- do(do(method(x) collect(generate-atom(x)) end, entry.link)),
+ do(do(method(x) collect(generate-atom(x)) end, entry.links)),
id(entry.identifier),
updated { do(collect(generate-atom(entry.updated))) },
published { do(collect(generate-atom(entry.published))) },
- do(do(method(x) collect(generate-atom(x)) end, entry.author)),
- do(do(method(x) collect(generate-atom(x)) end, entry.contributor)),
+// do(do(method(x) collect(generate-atom(x)) end, entry.authors)),
+// do(do(method(x) collect(generate-atom(x)) end, entry.contributors)),
do(collect(generate-atom(entry.content))),
} //missing: category, summary
end;
@@ -187,4 +263,4 @@
with-xml()
text(con.content)
end;
-end;
\ No newline at end of file
+end;
Modified: trunk/libraries/web-framework/library.dylan
==============================================================================
--- trunk/libraries/web-framework/library.dylan (original)
+++ trunk/libraries/web-framework/library.dylan Wed Jul 26 01:44:00 2006
@@ -126,6 +126,58 @@
redo,
print-xml;
+ //exports
+ export generate-rss;
+
+ //feed
+ export <feed>,
+ authors, authors-setter,
+ categories, categories-setter,
+ contributors, contributors-setter,
+ generator, generato-setter,
+ icon, icon-setter,
+ identifier, identifier-setter,
+ links, links-setter,
+ logo, logo-setter,
+ rights, rights-setter,
+ subtitle, subtitle-setter,
+ title, title-setter,
+ updated, updated-setter,
+ entries, entries-setter,
+ language, language-setter,
+ description, description-setter,
+ published, published-setter;
+
+ //entry
+ export <entry>,
+ authors, authors-setter,
+ categories, categories-setter,
+ content, content-setter,
+ contributors, contributors-setter,
+ identifier, identifier-setter,
+ links, links-setter,
+ published, published-setter,
+ rights, rights-setter,
+ source, source-setter,
+ summary, summary-setter,
+ title, title-setter,
+ updated, updated-setter,
+ comments, comments-setter;
+
+ export <category>,
+ term, term-setter,
+ scheme, scheme-setter,
+ label, label-setter,
+ description, description-setter;
+
+ export <generator>,
+ uri, uri-setter,
+ system-version, system-version,
+ text, text-setter;
+
+ export <content>,
+ <raw-content>;
+
//commands
export <add-command>,
<remove-command>,
Modified: trunk/libraries/web-framework/users.dylan
==============================================================================
--- trunk/libraries/web-framework/users.dylan (original)
+++ trunk/libraries/web-framework/users.dylan Wed Jul 26 01:44:00 2006
@@ -43,39 +43,35 @@
error: "User with same name already exists!"))
else
#t;
- end;
-end;
+ end if;
+end method check;
-define method valid-user? (user-name :: <string>, pass :: <string>)
- let user = element(storage(<user>), user-name, default: #f);
+define method valid-user? (username :: <string>, pass :: <string>)
+ let user = element(storage(<user>), username, default: #f);
if (user & (user.password = pass))
#t;
else
#f;
- end;
-end;
+ end if;
+end method valid-user?;
-define method login (request :: <request>)
+define method login (request :: <request>, username, password)
=> (username :: false-or(<string>))
- let user-name = get-query-value("username");
- let password = get-query-value("password");
- if (user-name & password)
- if (valid-user?(user-name, password))
- let session = ensure-session(request);
- *user* := storage(<user>)[user-name];
- set-attribute(session, #"username", user-name);
- user-name;
- end;
- end;
-end;
+ if (username & password & valid-user?(username, password))
+ let session = ensure-session(request);
+ *user* := storage(<user>)[username];
+ set-attribute(session, #"username", username);
+ username;
+ end if;
+end method login;
define method logged-in? (request :: <request>)
=> (username :: false-or(<string>))
let session = get-session(request);
if (session)
- let user-name = get-attribute(session, #"username");
- *user* := storage(<user>)[user-name];
- user-name;
+ let username = get-attribute(session, #"username");
+ *user* := storage(<user>)[username];
+ username;
end;
-end;
+end method logged-in?;
Modified: trunk/libraries/web-framework/web-framework.lid
==============================================================================
--- trunk/libraries/web-framework/web-framework.lid (original)
+++ trunk/libraries/web-framework/web-framework.lid Wed Jul 26 01:44:00 2006
@@ -7,4 +7,5 @@
web-macro
command
change
- users
\ No newline at end of file
+ changes
+ users
More information about the chatter
mailing list