diff --git a/contrib/httpd/html.factor b/contrib/httpd/html.factor index 2c9283be1e..0c11ea393b 100644 --- a/contrib/httpd/html.factor +++ b/contrib/httpd/html.factor @@ -152,23 +152,17 @@ M: html-stream stream-format ( str style stream -- ) : with-html-stream ( quot -- ) stdio get swap with-stream* ; +: make-outliner-quot + [ +
+ with-html-stream +
+ ] curry [ , \ show-final , ] [ ] make ; + : html-outliner ( caption contents -- ) - - - - - - - - - -
- "+" get-random-id dup >r rot [ - with-html-stream - ] curry [ , \ show-final , ] [ ] make updating-anchor - - call -
=id div>
; + "+ " 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 ;