:- module(weblogdemo, [ start/0, weblog_demo/0, server_port/1, stop_server/0, bye/0, normal_debug/0 ]). /** Web Log Demo This code based on Installer for Cogbot HHP Virtual Web Application Architecture: This is an http server. It serves a demo of weblog. This module contains preds for overall server control @author Anne Ogborn @copyright Copyright (c) 2012, University of Houston @license This code governed by the Cogbot New BSD License @tbd figure out why google maps isn't happy with xhtml @tbd should the file handlers for css, etc be in here? */ :- use_module(library(debug)). % threaded server :- use_module(library(http/thread_httpd)). % basic dispatch :- use_module(library(http/http_dispatch)). % to set the dialect :- use_module(library(http/html_write)). % logging - turns on and gets http_log :- use_module(library(http/http_log)). % head - so we can refer to resources :- use_module(library(http/html_head)). :- use_module(library(http/http_files)). :- use_module(library(www_browser)). :- use_module(weblog(formatting/boxes)). % flag to ensure we only start server once :- dynamic started/0. %% server_port(-Port:int) is det % % Returns the number to run the server on % % @param Port the port the server should listen on server_port(4050). % %%%%%%%%%%%%%%%%%%%% SERVER CONTROL %%%%%%%%%%%%%%%%%%% %% start is nondet % % Starts the server % nondet because the server might not start % start:- started,!, server_port(Port), format(user_error, 'Already running - browse http://127.0.0.1:~w/\n', [Port]). start:- % for unclear reasons, uncommenting this breaks the google maps % demo %html_set_options([dialect(xhtml)]), format(user_error, 'Starting weblog demo server\n', []), server_port(Port), http_server(http_dispatch, [port(Port), timeout(3600)]), assert(started), http_log('Starting weblog demo on port ~w~n' , [Port]). %% weblog_demo is nondet % % Start the server in debug mode and show % the index page % % weblog_demo:- start, server_port(Port), format(string(S), 'http://127.0.0.1:~w/' , [Port]), www_open_url(S). normal_debug :- debug(html_form), % @tbd There seem to be no debug messages for this topic? debug(http(request)). %% stop_server is det % % Stop the web server % stop_server :- server_port(Port), http_stop_server(Port, []), format(user_error, 'Server halted on port ~n', [Port]). %% bye is det % % shut down server and exit % bye :- stop_server, halt. % % No other good place for this, so it's here % :- http_handler(root(.) , redir_to_index, [id(indexroot)]). %% redir_to_index(+Request:http_request) is det % % handle bare domain request by redirection to index % % @param Request the HTTP request as the usual list format % redir_to_index(Request) :- http_redirect(moved_temporary, location_by_id(index), Request). :- http_handler(root('index.htm'), index_page , [id(index)]). index_page(_Request) :- reply_html_page( title('Weblog Demo'), [ \html_requires(css('demo.css')), h1('Weblog demo page'), \abox('', 'Input', [\demo_item(testform), \demo_item(testcontrols), \demo_item(autocomplete), \demo_item(ajaxify)]), \abox('', 'Info', [ \demo_item(map), \demo_item(geocoding), \demo_item(buttons), \demo_item(books)]), \abox('', 'Formatting', [ \demo_item(wl_table), \demo_item(wl_windows)]), \abox('', 'Debug', [\demo_item(debug_demo), \demo_item(stats)]), \abox('', 'Navigation', [\demo_item(accordion), \demo_item(menu)]), \abox('', 'Widgets', [\demo_item(clippy)]), p('This page also happens to demo boxes, which doesn\'t otherwise have a demo page'), p('geohashing doesn\'t have a demo page, but is extensively used in the Impatient Geohasher application, get it on Github'), p('info/stock/crox/croxstock.pl doesn\'t have a demo page.') ]). %% demo_item(+Item:location_id) % % Pass the location id and it generates the demo badge % demo_item(Item) --> { demo_label(Item, Label) ; atom_concat('Oops, No Label For ', Item, Label) }, html([ p(a(href=location_by_id(Item), ['Demo ', Label])) ]). % % it's ugly having all this in one file, but % I haven't decided how to architect breaking it up yet % so bear with me here :- discontiguous demo_label/2. demo_label(testform, 'Validated Form'). :- ensure_loaded(html_form_demo). demo_label(testcontrols, 'Control Test'). demo_label(googlemap, 'Google Map'). :- ensure_loaded(google_map_demo). demo_label(map, 'Maps'). :- ensure_loaded(map_demo). demo_label(wl_table, 'Table Generation'). :- ensure_loaded(table_demo). demo_label(wl_windows, 'Windows and popups'). :- ensure_loaded(wl_windows_demo). demo_label(debug_demo, 'Debugging Tools'). :- ensure_loaded(debug_demo). demo_label(stats, 'Server Statistics'). :- ensure_loaded(weblog(debug_page/server_stats)). demo_label(accordion, 'Accordion'). :- ensure_loaded(accordion_demo). demo_label(buttons, 'Buttons'). :- ensure_loaded(buttons_demo). demo_label(geocoding, 'Geocoding'). :- ensure_loaded(geocoding_demo). demo_label(books, 'Books'). :- ensure_loaded(books_demo). demo_label(clippy, 'Clippy'). :- ensure_loaded(clippy_demo). demo_label(autocomplete, 'Auto Complete'). :- ensure_loaded(autocomplete_demo). demo_label(menu, 'Menus'). :- ensure_loaded(menus_demo). demo_label(ajaxify, 'Ajaxify'). :- ensure_loaded(ajaxify_demo).