html stream fixes, removing obsolete live updater code
parent
2acb28ae0c
commit
364856fe7f
|
@ -152,23 +152,17 @@ M: html-stream stream-format ( str style stream -- )
|
||||||
: with-html-stream ( quot -- )
|
: with-html-stream ( quot -- )
|
||||||
stdio get <html-stream> swap with-stream* ;
|
stdio get <html-stream> swap with-stream* ;
|
||||||
|
|
||||||
|
: make-outliner-quot
|
||||||
|
[
|
||||||
|
<div "padding-left:10px;" =style div>
|
||||||
|
with-html-stream
|
||||||
|
</div>
|
||||||
|
] curry [ , \ show-final , ] [ ] make ;
|
||||||
|
|
||||||
: html-outliner ( caption contents -- )
|
: html-outliner ( caption contents -- )
|
||||||
<table "display: inline; " =style table>
|
"+ " get-random-id dup >r
|
||||||
<tr>
|
rot make-outliner-quot updating-anchor call
|
||||||
<td>
|
<span r> =id span> </span> ;
|
||||||
"+" get-random-id dup >r rot [
|
|
||||||
with-html-stream
|
|
||||||
] curry [ , \ show-final , ] [ ] make updating-anchor
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
call
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td> </td>
|
|
||||||
<td> <div r> =id div> </td>
|
|
||||||
</tr>
|
|
||||||
</table> ;
|
|
||||||
|
|
||||||
: outliner-tag ( style quot -- )
|
: outliner-tag ( style quot -- )
|
||||||
outline pick hash [ html-outliner ] [ call ] if* ;
|
outline pick hash [ html-outliner ] [ call ] if* ;
|
||||||
|
|
|
@ -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" <resource-stream> contents ;
|
|
||||||
|
|
||||||
: include-live-updater-js ( -- )
|
|
||||||
#! Write out the HTML script to include the live updater
|
|
||||||
#! javascript code.
|
|
||||||
<script "JavaScript" =language script>
|
|
||||||
get-live-updater-js write-html
|
|
||||||
</script> ;
|
|
||||||
|
|
||||||
: 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.
|
|
||||||
<a get-random-id dup =id "#" =href a> swap write </a> ;
|
|
||||||
|
|
||||||
: 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 "div-id" get =id div> "div-quot" get call </div>
|
|
||||||
] 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.
|
|
||||||
<script "JavaScript" =language script>
|
|
||||||
"document.getElementById('" write-html
|
|
||||||
write-html
|
|
||||||
"').onclick=liveUpdaterUri('" write-html
|
|
||||||
register-live-anchor-quot id>url write-html
|
|
||||||
"');" write-html
|
|
||||||
</script> ;
|
|
||||||
|
|
||||||
: 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.
|
|
||||||
<input get-random-id dup =id "text" =type input/> ;
|
|
||||||
|
|
||||||
: 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 "div-id" get =id div> "div-quot" get call </div>
|
|
||||||
] 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.
|
|
||||||
<script "JavaScript" =language script>
|
|
||||||
"liveSearch('" write
|
|
||||||
write
|
|
||||||
"', '" write
|
|
||||||
register-live-search-quot id>url write
|
|
||||||
"');" write
|
|
||||||
</script> ;
|
|
||||||
|
|
||||||
: 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 ;
|
|
|
@ -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);
}
|
|
|
@ -9,7 +9,6 @@ USING: words kernel parser sequences io compiler ;
|
||||||
"responder"
|
"responder"
|
||||||
"httpd"
|
"httpd"
|
||||||
"cont-responder"
|
"cont-responder"
|
||||||
"live-updater"
|
|
||||||
"prototype-js"
|
"prototype-js"
|
||||||
"html"
|
"html"
|
||||||
"file-responder"
|
"file-responder"
|
||||||
|
|
|
@ -24,4 +24,4 @@ USING: io httpd cont-responder html kernel lists namespaces strings ;
|
||||||
#! call the given quotation on the server. The output generated
|
#! call the given quotation on the server. The output generated
|
||||||
#! from that quotation will replace the DOM element on the page with
|
#! from that quotation will replace the DOM element on the page with
|
||||||
#! the given id. The 'text' is the anchor text.
|
#! the given id. The 'text' is the anchor text.
|
||||||
<a "#" =href updating-javascript =onclick a> write </a> ;
|
<a updating-javascript =onclick a> write </a> ;
|
||||||
|
|
Loading…
Reference in New Issue