;
+ "+ " get-random-id dup >r
+ rot make-outliner-quot updating-anchor call
+ =id span> ;
: outliner-tag ( style quot -- )
outline pick hash [ html-outliner ] [ call ] if* ;
diff --git a/contrib/httpd/live-updater.factor b/contrib/httpd/live-updater.factor
deleted file mode 100644
index 768ed969f1..0000000000
--- a/contrib/httpd/live-updater.factor
+++ /dev/null
@@ -1,127 +0,0 @@
-! Copyright (C) 2004 Chris Double.
-! See http://factorcode.org/license.txt for BSD license.
-!
-! cont-responder code for display forms and anchors that use
-! XMLHttpRequest and the 'liveUpdater.js' code.
-IN: live-updater
-USING: cont-responder html io kernel lists namespaces strings
-xml ;
-
-: get-live-updater-js ( filename -- string )
- #! Return the liveUpdater javascript code as a string.
- "/contrib/httpd/liveUpdater.js" contents ;
-
-: include-live-updater-js ( -- )
- #! Write out the HTML script to include the live updater
- #! javascript code.
- ;
-
-: write-live-anchor-tag ( text -- id )
- #! Write out the HTML for the clickable anchor. This
- #! will have no actionable HREF assigned to it. Instead
- #! an onclick is set via DHTML later to make it run a
- #! quotation on the server. The randomly generated id
- #! for the anchor is returned.
- swap write ;
-
-: register-live-anchor-quot ( div-id div-quot -- kid )
- #! Register the 'quot' with the cont-responder so
- #! that when it is run it will produce an HTML
- #! fragment which is the output generated by calling
- #! 'quot'. That HTML fragment will be wrapped in a
- #! 'div' with the given id.
- [
- "div-quot" set
- "div-id" set
- ] make-hash [
- [
- "disable-initial-redirect?" on
- [
-
"div-quot" get call
- ] show
- ] bind
- ] cons t swap register-continuation ;
-
-: write-live-anchor-script ( div-id div-quot anchor-id -- )
- #! Write the javascript that will attach the onclick
- #! event handler to the anchor with the 'anchor-id'. The
- #! onclick, when clicked, will retrieve from the server
- #! the HTML generated by the output of 'div-quot' wrapped
- #! in a 'div' tag with the 'div-id'. That 'div' tag will
- #! replace whatever HTML DOM object currently has that same
- #! id.
- ;
-
-: live-anchor ( id quot text -- )
- #! Write out the HTML for an anchor that when clicked
- #! will replace the DOM object on the current page with
- #! the given 'id' with the result of the output of calling
- #! 'quot'.
- write-live-anchor-tag
- write-live-anchor-script ;
-
-: write-live-search-tag ( -- id )
- #! Write out the HTML for the input box. This
- #! will have no actionable keydown assigned to it. Instead
- #! a keydown is set via DHTML later to make it run a
- #! quotation on the server. The randomly generated id
- #! for the input box is returned.
- ;
-
-: register-live-search-quot ( div-id div-quot -- kid )
- #! Register the 'quot' with the cont-responder so
- #! that when it is run it will produce an HTML
- #! fragment which is the output generated by calling
- #! 'quot'. That HTML fragment will be wrapped in a
- #! 'div' with the given id. The 'quot' is called with
- #! a string on top of the stack. This is the input string
- #! entered in the live search input box.
- [
- "div-quot" set
- "div-id" set
- ] make-hash [
- [
- "disable-initial-redirect?" on
- #! Retrieve the search query value from the POST parameters.
- [ "s" get ] bind
- [
- #! Don't need the URL as the 'show' won't be resumed.
- drop
-
"div-quot" get call
- ] show
- ] bind
- ] cons t swap register-continuation ;
-
-: write-live-search-script ( div-id div-quot id-id -- )
- #! Write the javascript that will attach the keydown handler
- #! to the input box with the give id. Whenever a keydown is
- #! received the 'div-quot' will be executed on the server,
- #! with the input boxes text on top of the stack. The
- #! output of the quot will be an HTML fragment, it is wrapped in
- #! a 'div' with the id 'div-id' and will
- #! replace whatever HTML DOM object currently has that same
- #! id.
- ;
-
-: live-search ( div-id div-quot -- )
- #! Write an input text field. The keydown of this
- #! text field will run 'div-quot' on the server with
- #! the value of the text field on the stack. The output
- #! of div-quot will replace the HTML DOM object with the
- #! given id.
- write-live-search-tag
- write-live-search-script ;
diff --git a/contrib/httpd/liveUpdater.js b/contrib/httpd/liveUpdater.js
deleted file mode 100644
index 14c0ac8628..0000000000
--- a/contrib/httpd/liveUpdater.js
+++ /dev/null
@@ -1 +0,0 @@
-/*
liveUpdater.js originally written by Avi Bryant, author of
Seaside (http://www.beta4.com/seaside2)
Modifed by Chris Double to add LiveUpdaterPost and use '
instead of " for the id.
*/
function liveUpdaterUri(uri)
{
return liveUpdater(function() { return uri; });
}
function liveUpdater(uriFunc)
{
var request = false;
var regex = /<(\w+).*?id='(\w+)'.*?>((.|\n)*)<\/\1>/;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
function update()
{
if(request && request.readyState < 4)
request.abort();
if(!window.XMLHttpRequest)
request = new ActiveXObject("Microsoft.XMLHTTP");
request.onreadystatechange = processRequestChange;
request.open("GET", uriFunc());
request.send(null);
return false;
}
function processRequestChange()
{
if(request.readyState == 4)
{
var results = regex.exec(request.responseText);
if(results)
document.getElementById(results[2]).innerHTML = results[3];
}
}
return update;
}
function liveUpdaterPost(uriFunc)
{
var request = false;
var regex = /<(\w+).*?id='(\w+)'.*?>((.|\n)*)<\/\1>/;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
function update(data)
{
if(request && request.readyState < 4)
request.abort();
if(!window.XMLHttpRequest)
request = new ActiveXObject("Microsoft.XMLHTTP");
request.onreadystatechange = processRequestChange;
request.open("POST", uriFunc());
request.send(data);
return false;
}
function processRequestChange()
{
if(request.readyState == 4)
{
var results = regex.exec(request.responseText);
if(results)
document.getElementById(results[2]).innerHTML = results[3];
}
}
return update;
}
function liveSearch(id, uri)
{
var updater = liveUpdaterPost((function() { return uri; }));
var last = "";
var timeout = false;
function update()
{
if (last != document.getElementById(id).value)
updater("s=" + escape(document.getElementById(id).value));
}
function start() {
if (timeout)
window.clearTimeout(timeout);
timeout = window.setTimeout(update, 300);
}
if (navigator.userAgent.indexOf("Safari") > 0)
document.getElementById(id).addEventListener("keydown",start,false);
else if (navigator.product == "Gecko")
document.getElementById(id).addEventListener("keypress",start,false);
else
document.getElementById(id).attachEvent("onkeydown",start);
}
\ No newline at end of file
diff --git a/contrib/httpd/load.factor b/contrib/httpd/load.factor
index 74a2abaa60..7af1b24c54 100644
--- a/contrib/httpd/load.factor
+++ b/contrib/httpd/load.factor
@@ -9,7 +9,6 @@ USING: words kernel parser sequences io compiler ;
"responder"
"httpd"
"cont-responder"
- "live-updater"
"prototype-js"
"html"
"file-responder"
diff --git a/contrib/httpd/prototype-js.factor b/contrib/httpd/prototype-js.factor
index 99c0ed41f8..3cad30ec1b 100644
--- a/contrib/httpd/prototype-js.factor
+++ b/contrib/httpd/prototype-js.factor
@@ -24,4 +24,4 @@ USING: io httpd cont-responder html kernel lists namespaces strings ;
#! call the given quotation on the server. The output generated
#! from that quotation will replace the DOM element on the page with
#! the given id. The 'text' is the anchor text.
- write ;
+ write ;