You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2010/12/06 08:19:25 UTC

svn commit: r1042535 - in /tuscany/sca-cpp/trunk: ./ modules/ modules/js/ modules/js/htdocs/ modules/oauth/htdocs/ modules/openid/htdocs/ modules/server/ samples/loan-python/htdocs/ samples/store-cluster/htdocs/domains/jane/ samples/store-cluster/htdoc...

Author: jsdelfino
Date: Mon Dec  6 07:19:24 2010
New Revision: 1042535

URL: http://svn.apache.org/viewvc?rev=1042535&view=rev
Log:
Create a js module for client side javascripts. Move client component script to that module and add a few utility scripts.

Added:
    tuscany/sca-cpp/trunk/modules/js/
    tuscany/sca-cpp/trunk/modules/js/Makefile.am
      - copied, changed from r1042534, tuscany/sca-cpp/trunk/modules/Makefile.am
    tuscany/sca-cpp/trunk/modules/js/htdocs/
    tuscany/sca-cpp/trunk/modules/js/htdocs/component.js
    tuscany/sca-cpp/trunk/modules/js/htdocs/scdl.js
    tuscany/sca-cpp/trunk/modules/js/htdocs/ui.js
    tuscany/sca-cpp/trunk/modules/js/htdocs/util.js
Modified:
    tuscany/sca-cpp/trunk/configure.ac
    tuscany/sca-cpp/trunk/modules/Makefile.am
    tuscany/sca-cpp/trunk/modules/oauth/htdocs/index.html
    tuscany/sca-cpp/trunk/modules/openid/htdocs/index.html
    tuscany/sca-cpp/trunk/modules/server/Makefile.am
    tuscany/sca-cpp/trunk/modules/server/server-conf
    tuscany/sca-cpp/trunk/samples/loan-python/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/jane/index.html
    tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/joe/index.html
    tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-gae/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-java/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-python/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-sql/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/jane/index.html
    tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/joe/index.html

Modified: tuscany/sca-cpp/trunk/configure.ac
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/configure.ac?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/configure.ac (original)
+++ tuscany/sca-cpp/trunk/configure.ac Mon Dec  6 07:19:24 2010
@@ -890,6 +890,7 @@ AC_CONFIG_FILES([Makefile
                  modules/scheme/Makefile
                  modules/atom/Makefile
                  modules/rss/Makefile
+                 modules/js/Makefile
                  modules/json/Makefile
                  modules/scdl/Makefile
                  modules/http/Makefile

Modified: tuscany/sca-cpp/trunk/modules/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/Makefile.am?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/modules/Makefile.am Mon Dec  6 07:19:24 2010
@@ -15,5 +15,5 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-SUBDIRS = scheme atom rss json scdl http server python java openid oauth wsgi
+SUBDIRS = scheme atom rss js json scdl http server python java openid oauth wsgi
 

Copied: tuscany/sca-cpp/trunk/modules/js/Makefile.am (from r1042534, tuscany/sca-cpp/trunk/modules/Makefile.am)
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/Makefile.am?p2=tuscany/sca-cpp/trunk/modules/js/Makefile.am&p1=tuscany/sca-cpp/trunk/modules/Makefile.am&r1=1042534&r2=1042535&rev=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/modules/js/Makefile.am Mon Dec  6 07:19:24 2010
@@ -15,5 +15,7 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-SUBDIRS = scheme atom rss json scdl http server python java openid oauth wsgi
+moddir = $(prefix)/modules/js
+nobase_dist_mod_DATA = htdocs/*.js
+EXTRA_DIST = htdocs/*.js
 

Added: tuscany/sca-cpp/trunk/modules/js/htdocs/component.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/htdocs/component.js?rev=1042535&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/modules/js/htdocs/component.js (added)
+++ tuscany/sca-cpp/trunk/modules/js/htdocs/component.js Mon Dec  6 07:19:24 2010
@@ -0,0 +1,578 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ *
+ * The JSON-RPC client code is based on Jan-Klaas' JavaScript
+ * o lait library (jsolait).
+ *
+ * $Id: jsonrpc.js,v 1.36.2.3 2006/03/08 15:09:37 mclark Exp $
+ *
+ * Copyright (c) 2003-2004 Jan-Klaas Kollhof
+ * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ */
+
+/**
+ * Client component wiring API, supporting JSON and ATOM bindings.
+ */
+
+/**
+ * Escape a character.
+ */
+var JSONClient = new Object();
+
+JSONClient.escapeJSONChar = function(c) {
+    if(c == "\"" || c == "\\") return "\\" + c;
+    else if (c == "\b") return "\\b";
+    else if (c == "\f") return "\\f";
+    else if (c == "\n") return "\\n";
+    else if (c == "\r") return "\\r";
+    else if (c == "\t") return "\\t";
+    var hex = c.charCodeAt(0).toString(16);
+    if(hex.length == 1) return "\\u000" + hex;
+    else if(hex.length == 2) return "\\u00" + hex;
+    else if(hex.length == 3) return "\\u0" + hex;
+    else return "\\u" + hex;
+};
+
+/**
+ * Encode a string into JSON format.
+ */
+JSONClient.escapeJSONString = function(s) {
+    /* The following should suffice but Safari's regex is broken
+       (doesn't support callback substitutions)
+       return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
+       JSONClient.escapeJSONChar) + "\"";
+    */
+
+    /* Rather inefficient way to do it */
+    var parts = s.split("");
+    for(var i = 0; i < parts.length; i++) {
+    var c = parts[i];
+    if(c == '"' ||
+       c == '\\' ||
+       c.charCodeAt(0) < 32 ||
+       c.charCodeAt(0) >= 128)
+        parts[i] = JSONClient.escapeJSONChar(parts[i]);
+    }
+    return "\"" + parts.join("") + "\"";
+};
+
+/**
+ * Marshall objects to JSON format.
+ */
+JSONClient.toJSON = function(o) {
+    if(o == null) {
+        return "null";
+    } else if(o.constructor == String) {
+        return JSONClient.escapeJSONString(o);
+    } else if(o.constructor == Number) {
+        return o.toString();
+    } else if(o.constructor == Boolean) {
+        return o.toString();
+    } else if(o.constructor == Date) {
+        return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
+    } else if(o.constructor == Array) {
+        var v = [];
+        for(var i = 0; i < o.length; i++) v.push(JSONClient.toJSON(o[i]));
+        return "[" + v.join(", ") + "]";
+    } else {
+        var v = [];
+        for(attr in o) {
+            if(o[attr] == null) v.push("\"" + attr + "\": null");
+            else if(typeof o[attr] == "function"); /* skip */
+            else v.push(JSONClient.escapeJSONString(attr) + ": " + JSONClient.toJSON(o[attr]));
+        }
+        return "{" + v.join(", ") + "}";
+    }
+};
+
+/**
+ * HTTPBindingClient.Exception.
+ */
+HTTPBindingClient.Exception = function(code, message, javaStack) {
+    this.code = code;
+    var name;
+    if(javaStack) {
+        this.javaStack = javaStack;
+        var m = javaStack.match(/^([^:]*)/);
+        if(m) name = m[0];
+    }
+    if(name) this.name = name;
+    else this.name = "HTTPBindingClientException";
+    this.message = message;
+};
+
+HTTPBindingClient.Exception.CODE_REMOTE_EXCEPTION = 490;
+HTTPBindingClient.Exception.CODE_ERR_CLIENT = 550;
+HTTPBindingClient.Exception.CODE_ERR_PARSE = 590;
+HTTPBindingClient.Exception.CODE_ERR_NOMETHOD = 591;
+HTTPBindingClient.Exception.CODE_ERR_UNMARSHALL = 592;
+HTTPBindingClient.Exception.CODE_ERR_MARSHALL = 593;
+
+HTTPBindingClient.Exception.prototype = new Error();
+HTTPBindingClient.Exception.prototype.toString = function(code, msg) {
+    return this.name + ": " + this.message;
+};
+
+/**
+ * Default top level exception handler.
+ */
+HTTPBindingClient.default_ex_handler = function(e) {
+    alert(e);
+};
+
+/**
+ * Client settable variables
+ */
+HTTPBindingClient.toplevel_ex_handler = HTTPBindingClient.default_ex_handler;
+HTTPBindingClient.profile_async = false;
+HTTPBindingClient.max_req_active = 1;
+HTTPBindingClient.requestId = 1;
+
+/**
+ * HTTPBindingClient implementation
+ */
+HTTPBindingClient.prototype._createApplyMethod = function() {
+    var fn = function() {
+        var args = [];
+        var callback = null;
+        var methodName = arguments[0];
+        for(var i = 1; i < arguments.length; i++) args.push(arguments[i]);
+
+        if(typeof args[args.length - 1] == "function") callback = args.pop();
+
+        var req = fn.client._makeRequest.call(fn.client, methodName, args, callback);
+        if(callback == null) {
+            return fn.client._sendRequest.call(fn.client, req);
+        } else {
+            HTTPBindingClient.async_requests.push(req);
+            HTTPBindingClient.kick_async();
+            return req.requestId;
+        }
+    };
+    fn.client = this;
+    return fn;
+};
+
+HTTPBindingClient._getCharsetFromHeaders = function(http) {
+    try {
+        var contentType = http.getResponseHeader("Content-type");
+        var parts = contentType.split(/\s*;\s*/);
+        for(var i = 0; i < parts.length; i++) {
+            if(parts[i].substring(0, 8) == "charset=")
+                return parts[i].substring(8, parts[i].length);
+        }
+    } catch (e) {}
+    return "UTF-8";
+};
+
+/**
+ * Async queue globals
+ */
+HTTPBindingClient.async_requests = [];
+HTTPBindingClient.async_inflight = {};
+HTTPBindingClient.async_responses = [];
+HTTPBindingClient.async_timeout = null;
+HTTPBindingClient.num_req_active = 0;
+
+HTTPBindingClient._async_handler = function() {
+    HTTPBindingClient.async_timeout = null;
+
+    while(HTTPBindingClient.async_responses.length > 0) {
+        var res = HTTPBindingClient.async_responses.shift();
+        if(res.canceled) continue;
+        if(res.profile) res.profile.dispatch = new Date();
+        try {
+            res.cb(res.result, res.ex, res.profile);
+        } catch(e) {
+            HTTPBindingClient.toplevel_ex_handler(e);
+        }
+    }
+
+    while(HTTPBindingClient.async_requests.length > 0 && HTTPBindingClient.num_req_active < HTTPBindingClient.max_req_active) {
+        var req = HTTPBindingClient.async_requests.shift();
+        if(req.canceled) continue;
+        req.client._sendRequest.call(req.client, req);
+    }
+};
+
+HTTPBindingClient.kick_async = function() {
+    if(HTTPBindingClient.async_timeout == null)
+        HTTPBindingClient.async_timeout = setTimeout(HTTPBindingClient._async_handler, 0);
+};
+
+HTTPBindingClient.cancelRequest = function(requestId) {
+    /* If it is in flight then mark it as canceled in the inflight map
+       and the XMLHttpRequest callback will discard the reply. */
+    if(HTTPBindingClient.async_inflight[requestId]) {
+        HTTPBindingClient.async_inflight[requestId].canceled = true;
+        return true;
+    }
+
+    /* If its not in flight yet then we can just mark it as canceled in
+       the the request queue and it will get discarded before being sent. */
+    for(var i in HTTPBindingClient.async_requests) {
+        if(HTTPBindingClient.async_requests[i].requestId == requestId) {
+            HTTPBindingClient.async_requests[i].canceled = true;
+            return true;
+        }
+    }
+
+    /* It may have returned from the network and be waiting for its callback
+       to be dispatched, so mark it as canceled in the response queue
+       and the response will get discarded before calling the callback. */
+    for(var i in HTTPBindingClient.async_responses) {
+        if(HTTPBindingClient.async_responses[i].requestId == requestId) {
+            HTTPBindingClient.async_responses[i].canceled = true;
+            return true;
+        }
+    }
+
+    return false;
+};
+
+HTTPBindingClient.prototype._makeRequest = function(methodName, args, cb) {
+    var req = {};
+    req.client = this;
+    req.requestId = HTTPBindingClient.requestId++;
+
+    var obj = {};
+    obj.id = req.requestId;
+    if (this.objectID)
+        obj.method = ".obj#" + this.objectID + "." + methodName;
+    else
+        obj.method = methodName;
+    obj.params = args;
+
+    if (cb) req.cb = cb;
+    if (HTTPBindingClient.profile_async)
+        req.profile = { "submit": new Date() };
+    req.data = JSONClient.toJSON(obj);
+
+    return req;
+};
+
+HTTPBindingClient.prototype._sendRequest = function(req) {
+    if(req.profile) req.profile.start = new Date();
+
+    /* Get free http object from the pool */
+    var http = HTTPBindingClient.poolGetHTTPRequest();
+    HTTPBindingClient.num_req_active++;
+
+    /* Send the request */
+    http.open("POST", this.uri, (req.cb != null));
+
+    /* setRequestHeader is missing in Opera 8 Beta */
+    try {
+        http.setRequestHeader("Content-type", "text/plain");
+    } catch(e) {}
+
+    /* Construct call back if we have one */
+    if(req.cb) {
+        var self = this;
+        http.onreadystatechange = function() {
+            if(http.readyState == 4) {
+                http.onreadystatechange = function () {};
+                var res = { "cb": req.cb, "result": null, "ex": null};
+                if (req.profile) {
+                    res.profile = req.profile;
+                    res.profile.end = new Date();
+                }
+                try { res.result = self._handleResponse(http); }
+                catch(e) { res.ex = e; }
+                if(!HTTPBindingClient.async_inflight[req.requestId].canceled)
+                    HTTPBindingClient.async_responses.push(res);
+                delete HTTPBindingClient.async_inflight[req.requestId];
+                HTTPBindingClient.kick_async();
+            }
+        };
+    } else {
+        http.onreadystatechange = function() {};
+    }
+
+    HTTPBindingClient.async_inflight[req.requestId] = req;
+    
+    try {
+        http.send(req.data);
+    } catch(e) {
+        HTTPBindingClient.poolReturnHTTPRequest(http);
+        HTTPBindingClient.num_req_active--;
+        throw new HTTPBindingClient.Exception(HTTPBindingClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+    }
+
+    if(!req.cb) return this._handleResponse(http);
+};
+
+HTTPBindingClient.prototype._handleResponse = function(http) {
+    /* Get the charset */
+    if(!this.charset) {
+        this.charset = HTTPBindingClient._getCharsetFromHeaders(http);
+    }
+
+    /* Get request results */
+    var status, statusText, data;
+    try {
+        status = http.status;
+        statusText = http.statusText;
+        data = http.responseText;
+    } catch(e) {
+        HTTPBindingClient.poolReturnHTTPRequest(http);
+        HTTPBindingClient.num_req_active--;
+        HTTPBindingClient.kick_async();
+        throw new HTTPBindingClient.Exception(HTTPBindingClient.Exception.CODE_ERR_CLIENT, "Connection failed");
+    }
+
+    /* Return http object to the pool; */
+    HTTPBindingClient.poolReturnHTTPRequest(http);
+    HTTPBindingClient.num_req_active--;
+
+    /* Unmarshall the response */
+    if(status != 200) {
+        throw new HTTPBindingClient.Exception(status, statusText);
+    }
+    var obj;
+    try {
+        eval("obj = " + data);
+    } catch(e) {
+        throw new HTTPBindingClient.Exception(550, "error parsing result");
+    }
+    if(obj.error)
+        throw new HTTPBindingClient.Exception(obj.error.code, obj.error.msg, obj.error.trace);
+    var res = obj.result;
+
+    /* Handle CallableProxy */
+    if(res && res.objectID && res.JSONRPCType == "CallableReference")
+        return new HTTPBindingClient(this.uri, res.objectID);
+
+    return res;
+};
+
+
+/**
+ * XMLHttpRequest wrapper code
+ */
+HTTPBindingClient.http_spare = [];
+HTTPBindingClient.http_max_spare = 8;
+
+HTTPBindingClient.poolGetHTTPRequest = function() {
+    if(HTTPBindingClient.http_spare.length > 0) {
+        return HTTPBindingClient.http_spare.pop();
+    }
+    return HTTPBindingClient.getHTTPRequest();
+};
+
+HTTPBindingClient.poolReturnHTTPRequest = function(http) {
+    if(HTTPBindingClient.http_spare.length >= HTTPBindingClient.http_max_spare)
+        delete http;
+    else
+        HTTPBindingClient.http_spare.push(http);
+};
+
+HTTPBindingClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
+                 "MSXML2.XMLHTTP.4.0",
+                 "MSXML2.XMLHTTP.3.0",
+                 "MSXML2.XMLHTTP",
+                 "Microsoft.XMLHTTP" ];
+
+HTTPBindingClient.getHTTPRequest = function() {
+    /* Mozilla XMLHttpRequest */
+    try {
+        HTTPBindingClient.httpObjectName = "XMLHttpRequest";
+        return new XMLHttpRequest();
+    } catch(e) {}
+
+    /* Microsoft MSXML ActiveX */
+    for (var i=0; i < HTTPBindingClient.msxmlNames.length; i++) {
+        try {
+            HTTPBindingClient.httpObjectName = HTTPBindingClient.msxmlNames[i];
+            return new ActiveXObject(HTTPBindingClient.msxmlNames[i]);
+        } catch (e) {}
+    }
+
+    /* None found */
+    HTTPBindingClient.httpObjectName = null;
+    throw new HTTPBindingClient.Exception(0, "Can't create XMLHttpRequest object");
+};
+
+
+HTTPBindingClient.prototype.get = function(id, responseFunction) {
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                var strDocument = xhr.responseText;
+                var xmlDocument = xhr.responseXML;
+                if(!xmlDocument || xmlDocument.childNodes.length==0){ 
+                    xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+                } 
+                if (responseFunction != null) responseFunction(xmlDocument);
+            } else {
+                alert("get - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("GET", this.uri + '/' + id, true);
+    xhr.send(null);
+};
+
+HTTPBindingClient.prototype.post = function (entry, responseFunction) {
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 201) {
+                var strDocument = xhr.responseText;
+                var xmlDocument = xhr.responseXML;
+                if(!xmlDocument || xmlDocument.childNodes.length==0){ 
+                    xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+                } 
+                if (responseFunction != null) responseFunction(xmlDocument);
+            } else {
+                alert("post - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("POST", this.uri, true);
+    xhr.setRequestHeader("Content-Type", "application/atom+xml");
+    xhr.send(entry);
+};
+
+HTTPBindingClient.prototype.put = function (id, entry, responseFunction) {
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                var strDocument = xhr.responseText;
+                var xmlDocument = xhr.responseXML;
+                if(!xmlDocument || xmlDocument.childNodes.length==0){ 
+                    xmlDocument = (new DOMParser()).parseFromString(strDocument, "text/xml");
+                } 
+                if (responseFunction != null) responseFunction(xmlDocument);
+            } else {
+                alert("put - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("PUT", this.uri + '/' + id, true);
+    xhr.setRequestHeader("Content-Type", "application/atom+xml");
+    xhr.send(entry);
+};
+
+HTTPBindingClient.prototype.del = function (id, responseFunction) {       
+    var xhr = this.createXMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == 4) {
+            if (xhr.status == 200) {
+                if (responseFunction != null) responseFunction();
+            } else {
+                alert("delete - Error getting data from the server");
+            }
+        }
+    }
+    xhr.open("DELETE", this.uri + '/' + id, true);        
+    xhr.send(null);
+};
+
+HTTPBindingClient.prototype.createXMLHttpRequest = function () {
+    /* Mozilla XMLHttpRequest */
+    try { return new XMLHttpRequest(); } catch(e) {}      
+    
+    /* Microsoft MSXML ActiveX */
+    for (var i = 0; i < HTTPBindingClient.msxmlNames.length; i++) {
+        try { return new ActiveXObject(HTTPBindingClient.msxmlNames[i]); } catch (e) {}
+    }
+    alert("XML http request not supported");
+    return null;
+}
+
+/**
+ * Construct an HTTPBindingClient.
+ */
+function HTTPBindingClient(cname, uri, objectID) {
+    this.uri = "/references/" + cname + "/" + uri;
+    this.objectID = objectID;
+    this.apply = this._createApplyMethod();
+
+    if (typeof DOMParser == "undefined") {
+       DOMParser = function () {}
+    
+       DOMParser.prototype.parseFromString = function (str, contentType) {
+          if (typeof ActiveXObject != "undefined") {
+             var d = new ActiveXObject("MSXML.DomDocument");
+             d.loadXML(str);
+             return d;
+          } else if (typeof XMLHttpRequest != "undefined") {
+             var req = new XMLHttpRequest;
+             req.open("GET", "data:" + (contentType || "application/xml") +
+                             ";charset=utf-8," + encodeURIComponent(str), false);
+             if (req.overrideMimeType) {
+                req.overrideMimeType(contentType);
+             }
+             req.send(null);
+             return req.responseXML;
+          }
+       }
+    }
+};
+
+/**
+ * Construct a component.
+ */
+function ClientComponent(name) {
+    this.name = name;
+}
+
+/**
+ * Public API.
+ */
+
+/**
+ * Return a component.
+ */
+function component(name) {
+    return new ClientComponent(name);
+}
+
+/**
+ * Return a reference proxy.
+ */
+function reference(comp, name) {
+    return new HTTPBindingClient(comp.name, name);
+};
+
+/**
+ * Add proxy functions to a reference proxy.
+ */
+function defun(ref) {
+    function defapply(name) {
+        return function() {
+            var args = new Array();
+            args[0] = name;
+            for (i = 0, n = arguments.length; i < n; i++)
+                args[i + 1] = arguments[i];
+            return this.apply.apply(this, args);
+        };
+    }
+
+    for (f = 1; f < arguments.length; f++) {
+        var fn = arguments[f];
+        ref[fn]= defapply(fn);
+    }
+    return ref;
+};
+

Added: tuscany/sca-cpp/trunk/modules/js/htdocs/scdl.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/htdocs/scdl.js?rev=1042535&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/modules/js/htdocs/scdl.js (added)
+++ tuscany/sca-cpp/trunk/modules/js/htdocs/scdl.js Mon Dec  6 07:19:24 2010
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+/**
+ * SCDL parsing functions.
+ */
+
+

Added: tuscany/sca-cpp/trunk/modules/js/htdocs/ui.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/htdocs/ui.js?rev=1042535&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/modules/js/htdocs/ui.js (added)
+++ tuscany/sca-cpp/trunk/modules/js/htdocs/ui.js Mon Dec  6 07:19:24 2010
@@ -0,0 +1,232 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+/**
+ * UI utility functions.
+ */
+
+/**
+ * Build a menu bar.
+ */ 
+function menu(name, href) {
+    function Menu(n, h) {
+        this.name = n;
+        this.href = h;
+
+        this.content = function() {
+            function complete(uri) {
+                if (uri.match('.*\.html$'))
+                    return uri;
+                if (uri.match('.*/$'))
+                    return uri + 'index.html';
+                return uri + '/index.html';
+            }
+
+            if (complete(this.href) != complete(window.top.location.pathname))
+                return '<a href="' + this.href + '" target="_parent">' + this.name + '</a>';
+            return '<span><b>' + this.name + '</b></span>';
+        };
+    }
+    return new Menu(name, href);
+}
+
+function menubar(left, right) {
+    var bar = '<table cellpadding="0" cellspacing="0" width="100%" class=tbar><tr>' +
+    '<td class=ltbar><table border="0" cellspacing="0" cellpadding="0"><tr>';
+    for (i in left)
+        bar = bar + '<td class=ltbar>' + left[i].content() + '</td>'
+
+    bar = bar + '</tr></table></td>' +
+    '<td class=rtbar><table border="0" cellpadding="0" cellspacing="0" align="right"><tr>';
+    for (i in right)
+        bar = bar + '<td class=rtbar>' + right[i].content() + '</td>'
+
+    bar = bar + '</tr></table></td></tr></table>';
+    return bar;
+}
+
+ 
+/**
+ * Autocomplete / suggest support for input fields
+ * To use it declare a 'suggest' function as follows:
+ * function suggestItems() {
+ *       return new Array('abc', 'def', 'ghi');
+ * }
+ * then hook it to an input field as follows:
+ * suggest(document.yourForm.yourInputField, suggestItems);
+ */ 
+function selectSuggestion(node, value) {
+    for (;;) {
+        node = node.parentNode;
+        if (node.tagName.toLowerCase() == 'div')
+              break;
+    }
+    node.selectSuggestion(value);
+}
+
+function hilightSuggestion(node, over) {
+    if (over)
+        node.className = 'suggestHilighted';
+    node.className = 'suggestItem';
+}
+
+function suggest(input, suggestFunction) {
+    input.suggest = suggestFunction;
+      
+    input.selectSuggestion = function(value) {
+        this.hideSuggestDiv();
+        this.value = value;
+    }
+    
+    input.hideSuggestDiv = function() {
+        if (this.suggestDiv != null) {
+            this.suggestDiv.style.visibility = 'hidden';
+        }
+    }
+    
+    input.showSuggestDiv = function() {
+        if (this.suggestDiv == null) {
+            this.suggestDiv = document.createElement('div');
+            this.suggestDiv.input = this;
+            this.suggestDiv.className = 'suggest';
+            input.parentNode.insertBefore(this.suggestDiv, input);
+            this.suggestDiv.style.visibility = 'hidden';
+            this.suggestDiv.style.zIndex = '99';
+            
+            this.suggestDiv.selectSuggestion = function(value) {
+                this.input.selectSuggestion(value);
+            }
+        }
+        
+        var values = this.suggest();
+        var items = '';
+        for (var i = 0; i < values.length; i++) {
+            if (values[i].indexOf(this.value) == -1)
+                continue;
+            if (items.length == 0)
+                items += '<table class=suggestTable>';
+            items += '<tr><td class="suggestItem" ' +
+            'onmouseover="hilightSuggestion(this, true)" onmouseout="hilightSuggestion(this, false)" ' +
+            'onmousedown="selectSuggestion(this, \'' + values[i] + '\')">' + values[i] + '</td></tr>';
+        }
+        if (items.length != 0)
+            items += '</table>';
+        this.suggestDiv.innerHTML = items;
+        
+        if (items.length != 0) {
+            var node = input;              
+            var left = 0;
+            var top = 0;
+            for (;;) {
+                left += node.offsetLeft;
+                top += node.offsetTop;
+                node = node.offsetParent;
+                if (node.tagName.toLowerCase() == 'body')
+                  break;
+            }
+            this.suggestDiv.style.left = left;
+            this.suggestDiv.style.top = top + input.offsetHeight;
+            this.suggestDiv.style.visibility = 'visible';
+        } else
+            this.suggestDiv.style.visibility = 'hidden';
+    }
+      
+    input.onkeydown = function(event) {
+        this.showSuggestDiv();
+    };
+
+    input.onkeyup = function(event) {
+        this.showSuggestDiv();
+    };
+
+    input.onmousedown = function(event) {
+        this.showSuggestDiv();
+    };
+
+    input.onblur = function(event) {
+        setTimeout(function() { input.hideSuggestDiv(); }, 50);
+    };
+}
+
+/**
+ * Return the content document of a window.
+ */
+function content(win) {
+    if (!isNil(win.document))
+        return win.document;
+    if (!isNil(win.contentDocument))
+        return win.contentDocument;
+    return null;
+}
+
+/**
+ * Return a child element of a node with the given id.
+ */
+function elementByID(node, id) {
+    for (var i in node.childNodes) {
+        var child = node.childNodes[i];
+        if (child.id == id)
+            return child;
+        var gchild = elementByID(child, id);
+        if (gchild != null)
+            return gchild;
+    }
+    return null;
+}
+
+/**
+ * Return the current document, or a child element with the given id.
+ */
+function $(id) {
+    if (id == document) {
+        if (!isNil(document.widget))
+            return widget;
+        return document;
+    }
+    return elementByID($(document), id);
+}
+
+/**
+ * Initialize a widget.
+ */
+function onloadwidget() {
+    if (isNil(window.parent) || isNil(window.parent.widgets))
+        return true;
+    var pdoc = content(window.parent);
+    for (w in window.parent.widgets) {
+        var ww = elementByID(pdoc, w).contentWindow;
+        if (ww == window) {
+            document.widget = elementByID(pdoc, window.parent.widgets[w]);
+            document.widget.innerHTML = document.body.innerHTML;
+            return true;
+        }
+    }
+    return true;
+}
+
+/**
+ * Load a widget into an element.
+ */
+var widgets = new Array();
+
+function bindwidget(f, el) {
+    window.widgets[f] = el;
+    return f;
+}
+

Added: tuscany/sca-cpp/trunk/modules/js/htdocs/util.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/htdocs/util.js?rev=1042535&view=auto
==============================================================================
--- tuscany/sca-cpp/trunk/modules/js/htdocs/util.js (added)
+++ tuscany/sca-cpp/trunk/modules/js/htdocs/util.js Mon Dec  6 07:19:24 2010
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+/**
+ * Utility functions.
+ */
+
+/**
+ * Simple scheme-like lists.
+ */
+function cons(car, cdr) {
+    return new Array(car).concat(cdr);
+}
+
+function car(l) {
+    return l[0];
+}
+
+function cdr(l) {
+    return l.slice(1);
+}
+
+function mklist() {
+    var a = new Array();
+    for (i = 0; i < arguments.length; i++)
+        a[i] = arguments[i];
+    return a;
+}
+
+function isList(v) {
+    return toString.call(v) === '[object Array]';
+}
+
+function isNil(v) {
+    return v == 'undefined' || v == null;
+}
+
+function isEmpty(l) {
+    return l.length == 0;
+}
+
+/**
+ * convert an array or object to a non-sparse array.
+ */ 
+function array(obj) {
+    if (isNil(obj.length)) {
+        var a = new Array();
+        a[0] = obj;
+        return a;
+    } else {
+        var a = new Array();
+        var n = 0;
+        for (var i in obj)
+            a[n++] = obj[i];
+        return a;
+    }
+}
+
+/**
+ * Dump an object to the console.
+ */
+function dump(o) {
+    for (f in o) {
+        try {
+            console.log(f + '=' + o[f]);
+        } catch (e) {}
+    }
+}
+

Modified: tuscany/sca-cpp/trunk/modules/oauth/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/oauth/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/oauth/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/modules/oauth/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -19,7 +19,7 @@
 
 <html>
 <head>
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 <script type="text/javascript">
 var protected = component("Protected");
 var userInfo = defun(reference(protected, "userInfo"), "getuser", "getemail", "getnickname", "getfullname", "getfirstname", "getlastname", "getrealm");

Modified: tuscany/sca-cpp/trunk/modules/openid/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/openid/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/openid/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/modules/openid/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -19,7 +19,7 @@
 
 <html>
 <head>
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 <script type="text/javascript">
 var protected = component("Protected");
 var userInfo = defun(reference(protected, "userInfo"), "getuser", "getemail", "getrealm");

Modified: tuscany/sca-cpp/trunk/modules/server/Makefile.am
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/Makefile.am?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/Makefile.am (original)
+++ tuscany/sca-cpp/trunk/modules/server/Makefile.am Mon Dec  6 07:19:24 2010
@@ -23,9 +23,7 @@ incldir = $(prefix)/include/modules/serv
 dist_mod_SCRIPTS = cpp-conf scheme-conf server-conf
 moddir = $(prefix)/modules/server
 
-nobase_dist_mod_DATA = htdocs/wiring/*.js
-
-EXTRA_DIST = domain-test.composite client-test.scm server-test.scm htdocs/*.xml htdocs/*.txt htdocs/*.html htdocs/wiring/*.js
+EXTRA_DIST = domain-test.composite client-test.scm server-test.scm htdocs/*.xml htdocs/*.txt htdocs/*.html
 
 mod_LTLIBRARIES = libmod_tuscany_eval.la libmod_tuscany_wiring.la
 noinst_DATA = libmod_tuscany_eval.so libmod_tuscany_wiring.so

Modified: tuscany/sca-cpp/trunk/modules/server/server-conf
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/server-conf?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/server-conf (original)
+++ tuscany/sca-cpp/trunk/modules/server/server-conf Mon Dec  6 07:19:24 2010
@@ -22,6 +22,8 @@ here=`readlink -f $0`; here=`dirname $he
 mkdir -p $1
 root=`readlink -f $1`
 
+jsprefix=`readlink -f $here/../js`
+
 conf=`cat $root/conf/httpd.conf | grep "# Generated by: httpd-conf"`
 host=`echo $conf | awk '{ print $6 }'`
 port=`echo $conf | awk '{ print $7 }' | awk -F "/" '{ print $1 }'`
@@ -53,8 +55,11 @@ cat >>$root/conf/httpd.conf <<EOF
 # Route all wiring through the configured server name
 SCAWiringServerName $servername
 
-# Serve HTTP binding JavaScript client code
-Alias /wiring/ref.js $here/htdocs/wiring/ref.js
+# Serve JavaScript client scripts
+Alias /component.js $jsprefix/htdocs/component.js
+Alias /scdl.js $jsprefix/htdocs/scdl.js
+Alias /util.js $jsprefix/htdocs/util.js
+Alias /ui.js $jsprefix/htdocs/ui.js
 
 EOF
 

Modified: tuscany/sca-cpp/trunk/samples/loan-python/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/loan-python/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/loan-python/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/loan-python/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var component = new tuscany.sca.Component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/jane/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/jane/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/jane/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/jane/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/joe/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/joe/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/joe/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-cluster/htdocs/domains/joe/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-gae/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-gae/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-gae/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-gae/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-java/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-java/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-java/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-java/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-python/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-python/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-python/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-python/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-sql/htdocs/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-sql/htdocs/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-sql/htdocs/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-sql/htdocs/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/jane/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/jane/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/jane/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/jane/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");

Modified: tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/joe/index.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/joe/index.html?rev=1042535&r1=1042534&r2=1042535&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/joe/index.html (original)
+++ tuscany/sca-cpp/trunk/samples/store-vhost/htdocs/domains/joe/index.html Mon Dec  6 07:19:24 2010
@@ -20,7 +20,7 @@
 <head>
 <title>Store</title>
 
-<script type="text/javascript" src="/wiring/ref.js"></script>
+<script type="text/javascript" src="/component.js"></script>
 
 <script type="text/javascript">
 var store = component("Store");