src/cm/media/js/lib/yui/yui3.0.0/examples/get/get-script-basic_clean.html
changeset 0 40c8f766c9b8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/media/js/lib/yui/yui3.0.0/examples/get/get-script-basic_clean.html	Mon Nov 23 15:14:29 2009 +0100
@@ -0,0 +1,242 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<title>Getting a Script Node with JSON Data</title>
+
+<style type="text/css">
+/*margin and padding on body element
+  can introduce errors in determining
+  element position and are not recommended;
+  we turn them off as a foundation for YUI
+  CSS treatments. */
+body {
+	margin:0;
+	padding:0;
+}
+</style>
+
+<link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
+<script type="text/javascript" src="../../build/yui/yui-debug.js"></script>
+
+
+<!--begin custom header content for this example-->
+<style type="text/css">
+#container ol {
+	/*bringing lists on to the page with breathing room */
+	margin-left:2em !important;
+}
+
+#container ol li {
+	/*giving OL's LIs generated numbers*/
+	list-style: decimal outside !important;	
+}
+
+#container h3 {
+	margin-top: 1em;
+}
+</style>
+<!--end custom header content for this example-->
+
+</head>
+
+<body class=" yui-skin-sam">
+
+<h1>Getting a Script Node with JSON Data</h1>
+
+<div class="exampleIntro">
+	<p>This example employs the <a href="http://developer.yahoo.com/yui/3/get/">YUI
+Get Utility</a> in a simple use case: retrieving JSON data from a cross-domain
+web service. While this is a relatively common usage, it's important to
+understand the security ramifications of this technique. Scripts loaded via the
+Get Utility (or any other &quot;script node&quot; solution) execute immediately
+once they are loaded. If you do not fully control (or fully trust) the script's
+source, this is not a safe technique and it can put the security of your users'
+data at risk. (For more information on the dangers of cross-site scripting
+[XSS] exploits, <a
+href="http://en.wikipedia.org/wiki/Cross-site_scripting">check out the
+Wikipedia entry on this subject</a>.)</p> <p>Here, we will use a trusted Yahoo!
+Search web service called <a
+href="http://developer.yahoo.com/search/siteexplorer/V1/inlinkData.html">Site
+Explorer</a> to return a list of inbound links for a given URL. The principal
+difference between this example and similar examples using <a
+href="http://developer.yahoo.com/yui/3/io/">YUI IO Utility</a> is
+that this technique does not require a server-side proxy. The browser connects
+directly to the third-party web service without bouncing through a proxy page
+as is required when using the XMLHttpRequest object (on which IO Utility
+relies).</p>
+			
+</div>
+
+<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
+
+<div id="container">
+
+    <!--Use a real form that works without JavaScript:-->
+    <form method="GET" action="http://siteexplorer.search.yahoo.com/advsearch" id="siteExplorer">
+
+        <label for="searchString">Site URL:</label> <input type="text" name="p" id="searchString" value="http://developer.yahoo.com/yui" size="40">
+        
+        <input type="hidden" name="bwm" value="i">
+        <input type="hidden" name="bwms" value="p">
+    
+        <input type="submit" id="siteExplorerData" value="Click here to get JSON data.">
+    
+    </form>
+
+    <div id="results">
+        <!--JSON output will be written to the DOM here-->
+        
+    </div>
+</div>
+
+<script type="text/javascript">
+
+YUI({base:"../../build/", timeout: 10000, filter:"debug", logInclude: {get:true, event:true, example:true}}).use("node", "dump",
+
+function(Y) { 
+
+    // We are going to create a global variable to get the 
+    // data back from the web service
+    MyNamespace = YUI.namespace('example.SiteExplorer');
+
+    var elResults = Y.one("#results"),
+        tIds = {},
+        loading = false,
+        current = null;
+        
+    // We use the Get Utility's success handler in conjunction with
+    // the web service callback in order to detect bad responses 
+    // from the web service.
+    var onSiteExplorerSuccess = function(o) {
+
+        // stop blocking requests
+        loading = false;
+
+        // A success response means the script node is inserted.  However, the
+        // utility is unable to detect whether or not the content of the script
+        // node is correct, or even if there was a bad response (like a 404
+        // error).  To get around this, we use the web service callback to
+        // verify that the script contents was correct.
+        if (o.tId in tIds) {
+Y.log("The Get Utility has fired the success handler indicating that the " +
+          "requested script has loaded and is ready for use.", "info", "example");
+        } else {
+Y.log("The Get utility has fired onSuccess but the webservice callback did not " +
+          "fire.  We could retry the transaction here, or notify the user of the " +
+          "failure.", "info", "example");
+        }
+
+    };
+
+    var onSiteExplorerFailure = function(o) {
+Y.log("The Get Utility failed.", "info", "example");
+    };
+
+    var onSiteExplorerTimeout = function(o) {
+Y.log("The Get Utility timed out.", "info", "example");
+    };
+    
+    //function to retrieve data from Yahoo! Site Explorer web service --
+    // http://developer.yahoo.com/search/siteexplorer/V1/inlinkData.html
+    var getSiteExplorerData = function() {
+        Y.log("Button clicked; getSiteExplorerData firing.", "info", "example");
+
+        // block multiple requests
+        if (loading) {
+            return;
+        }
+        loading = true;
+        
+        //Load the transitional state of the results section:
+        elResults.set("innerHTML", "<h3>Retrieving incoming links for " +
+            Y.one("#searchString").get('value') + ":</h3>" +
+            "<img src='http://l.yimg.com/a/i/nt/ic/ut/bsc/busybar_1.gif' " +
+            "alt='Please wait...'>");
+        
+        //prepare the URL for the Yahoo Site Explorer API:
+        var sURL = "http://search.yahooapis.com/SiteExplorerService/V1/inlinkData?" +
+            "appid=3wEDxLHV34HvAU2lMnI51S4Qra5m.baugqoSv4gcRllqqVZm3UrMDZWToMivf5BJ3Mom" +
+            "&results=20&output=json&omit_inlinks=domain" +
+            "&callback=MyNamespace.callback" +
+            "&query=" + encodeURIComponent(Y.one("#searchString").get('value'));
+        
+        //This simple line is the call to the Get Utility; we pass
+        //in the URL and the configuration object, which in this case
+        //consists merely of our success and failure callbacks:
+        var transactionObj = Y.Get.script(sURL, {
+            onSuccess: onSiteExplorerSuccess,
+            onFailure: onSiteExplorerFailure,
+            onTimeout: onSiteExplorerTimeout,
+            timeout: 20000,
+            context: Y
+        });
+        
+        //The script method returns a single-field object containing the
+        //tranaction id:
+        Y.log("Get Utility transaction started; transaction object: " + Y.dump(transactionObj), "info", "example");
+
+        // keep track of the current transaction id.  The transaction will be
+        // considered complete only if the web service callback is executed.
+        current = transactionObj.tId; 
+    };
+
+    MyNamespace.callback = function(results) {
+        Y.log("Web service returned data to Y.example.SiteExplorer.callback; beginning to process.", "info", "example");
+
+        // Mark the transaction as complete.  This will be checked by the onSuccess
+        // handler to determine if the transaction really succeeded.
+        tIds[current] = true;
+        
+        //work with the returned data to extract meaningful fields:
+        var aResults = results.ResultSet.Result;
+        var totalLinks = results.ResultSet.totalResultsAvailable;
+        var returnedLinkCount = results.ResultSet.totalResultsReturned;
+        
+        if(aResults) {//there are inbound links; process and display them:
+        
+            //write header and open list of inbound links:          
+            var html = "<h3>There are " +
+                totalLinks + 
+                " inbound links for this page; here are the first " + 
+                returnedLinkCount +
+                ":</h3><ol>";
+            
+            //process list of inbound links:
+            for (var i=0; i < aResults.length; i++) {
+                html += "<li><strong>" +
+                    aResults[i].Title +
+                    ":</strong> <a href='" +
+                    aResults[i].Url +
+                    "'>" + aResults[i].Url +
+                    "</a></li>";
+            }
+            
+            //close list of inbound links
+            html += "</ol>";
+            
+        } else {//no inbound links exist for this page:
+        
+            var html = "<h3>There are no inbound links for the page specified.</h3>";
+            
+        }
+        
+        //insert string into DOM:
+        elResults.set('innerHTML', html);
+    };
+
+    //suppress default form behavior
+    Y.on("submit", function(e) {
+        e.preventDefault();
+        getSiteExplorerData();
+    }, "#siteExplorer");
+
+});
+
+</script>
+
+<!--END SOURCE CODE FOR EXAMPLE =============================== -->
+
+</body>
+</html>