Index: pkg/polymer/lib/elements/web-animations-js/tutorial/try-it-yourself.js |
diff --git a/pkg/polymer/lib/elements/web-animations-js/tutorial/try-it-yourself.js b/pkg/polymer/lib/elements/web-animations-js/tutorial/try-it-yourself.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..46e0fae8c60fbae8e8b8381d06a60b717766b848 |
--- /dev/null |
+++ b/pkg/polymer/lib/elements/web-animations-js/tutorial/try-it-yourself.js |
@@ -0,0 +1,216 @@ |
+/* |
+ * Copyright 2013 Google Inc. All Rights Reserved. |
+ * |
+ * Licensed 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. |
+ */ |
+"use strict"; |
+ |
+// TryItDisplay creates and represents the input and output display. |
+ function TryItDisplay(containerElement) { |
+ this.iframe = new Iframe(); |
+ this.create(containerElement); |
+} |
+ |
+// Function that creates the input and output for the TryItYourself object. |
+ TryItDisplay.prototype.create = function(containerElement) { |
+ var heading = document.createElement("div"); |
+ heading.setAttribute("class", "heading"); |
+ heading.setAttribute("id", "heading") |
+ heading.innerHTML = "TRY IT YOURSELF"; |
+ containerElement.appendChild(heading); |
+ |
+ var button = document.createElement("button"); |
+ button.onclick = function(me) { return function() { me.update(); }; }(this); |
+ button.setAttribute("id", "update"); |
+ button.innerHTML = "Update"; |
+ heading.appendChild(button); |
+ |
+ var code = document.createElement("div"); |
+ code.setAttribute("class", "code"); |
+ code.setAttribute("id", "allCode"); |
+ containerElement.appendChild(code); |
+ |
+ var display = document.createElement("div"); |
+ display.setAttribute("class", "display"); |
+ containerElement.appendChild(display); |
+ display.appendChild(this.iframe.getDom()); |
+ |
+ var htmlHeader = document.createElement("div"); |
+ htmlHeader.setAttribute("class", "label"); |
+ htmlHeader.setAttribute("id", "htmlLabel") |
+ htmlHeader.innerHTML = "HTML Code"; |
+ code.appendChild(htmlHeader); |
+ |
+ var htmlCode = document.createElement("textarea"); |
+ htmlCode.setAttribute("id", "htmlCode"); |
+ htmlCode.setAttribute("class", "code"); |
+ code.appendChild(htmlCode); |
+ |
+ var cssHeader = document.createElement("div"); |
+ cssHeader.setAttribute("class", "label"); |
+ cssHeader.setAttribute("id", "cssLabel") |
+ cssHeader.innerHTML = "CSS Style"; |
+ code.appendChild(cssHeader); |
+ |
+ var cssCode = document.createElement("textarea"); |
+ cssCode.setAttribute("id", "cssCode"); |
+ cssCode.setAttribute("class", "code"); |
+ code.appendChild(cssCode); |
+ |
+ var jsHeader = document.createElement("div"); |
+ jsHeader.setAttribute("class", "label"); |
+ jsHeader.setAttribute("id", "jsLabel") |
+ jsHeader.innerHTML = "Javascript"; |
+ code.appendChild(jsHeader); |
+ |
+ var jsCode = document.createElement("textarea"); |
+ jsCode.setAttribute("id", "jsCode"); |
+ jsCode.setAttribute("class", "code"); |
+ code.appendChild(jsCode); |
+ |
+ var heading = document.createElement("div"); |
+ heading.setAttribute("class", "heading fail"); |
+ heading.setAttribute("id", "passOrFail") |
+ heading.innerHTML = "YOU PASSED!"; |
+ containerElement.appendChild(heading); |
+} |
+ |
+TryItDisplay.prototype.setDefaultHtml = function(newHtml) { |
+ document.getElementById('htmlCode').innerHTML = newHtml ? newHtml : ""; |
+} |
+ |
+TryItDisplay.prototype.setDefaultCss = function(newCss) { |
+ document.getElementById('cssCode').innerHTML = newCss ? newCss : ""; |
+} |
+ |
+TryItDisplay.prototype.setDefaultJs = function(newJs) { |
+ document.getElementById('jsCode').innerHTML = newJs ? newJs : ""; |
+} |
+ |
+TryItDisplay.prototype.addCheck = function(object, property, time) { |
+ this.iframe.checks.push("check(" |
+ + object + ", " + property + ", " + time + ", 'default');"); |
+} |
+ |
+// Set the default end time for the animation clock. |
+// Note: this will be overwritten if the user creates an animation longer than |
+// the time set here. |
+TryItDisplay.prototype.setTime = function(newTime) { |
+ this.iframe.time = newTime; |
+} |
+ |
+// Update takes the information currently in the HTML, CSS, and JS input boxes |
+// and displays it in the iframe. |
+TryItDisplay.prototype.update = function() { |
+ // Reload the iframe by resetting the source. |
+ document.getElementById("display").src = document.getElementById("display").src; |
+ document.getElementById("display").onload = function(me) { |
+ return function() { |
+ me.addCssHtml(); |
+ me.addAnimScript(); |
+ }; |
+ }(this); |
+} |
+ |
+// Add the CSS and HTML into the iframe. |
+TryItDisplay.prototype.addCssHtml = function() { |
+ var iframeDoc = this.iframe.doc.contentDocument; |
+ var htmlVal = document.getElementById("htmlCode").value; |
+ var cssVal = document.getElementById('cssCode').value |
+ +"\n" +"#dummy { display: none; }"; |
+ iframeDoc.getElementsByTagName("body")[0].innerHTML = htmlVal; |
+ iframeDoc.getElementsByTagName("style")[0].innerHTML = cssVal; |
+ |
+ // dummDiv allows the animation time to display properly the first time |
+ // the page loads. |
+ var dummyDiv = document.createElement("div"); |
+ dummyDiv.setAttribute("id", "dummy"); |
+ dummyDiv.setAttribute("class", "test"); |
+ iframeDoc.getElementsByTagName("body")[0].appendChild(dummyDiv); |
+} |
+ |
+// Add the Javascript value to the iframe. |
+TryItDisplay.prototype.addAnimScript = function() { |
+ var scriptElement = document.createElement('script'); |
+ var jsVal = this.getJsVal(); |
+ var iframeDoc = this.iframe.doc.contentDocument; |
+ |
+ var scriptDivs = iframeDoc.getElementsByTagName('script'); |
+ scriptElement.innerHTML = jsVal; |
+ par = iframeDoc.getElementsByTagName('body')[0]; |
+ par.appendChild(scriptElement); |
+} |
+ |
+// Get the user provided Javascript value, and append additional information |
+// to run the tests properly. |
+TryItDisplay.prototype.getJsVal = function() { |
+ var iframeDoc = this.iframe.doc.contentDocument; |
+ // The animation added to the javascript input allows the animation time to |
+ // display even when the user does not input an animation. |
+ var jsVal = "setupTutorialTests(); \n" |
+ + document.getElementById('jsCode').value + "\n" |
+ + "new Animation(document.getElementById('dummy'), {left: '100px'}, " |
+ + this.iframe.time + ");"; |
+ |
+ for (var i = 0; i < this.iframe.checks.length; i++) { |
+ jsVal += "\n" + this.iframe.checks[i]; |
+ } |
+ jsVal += " \nrunTests();"; |
+ return jsVal; |
+} |
+ |
+// Function to call once the user passes the tutorial. |
+TryItDisplay.pass = function() { |
+ document.getElementById("passOrFail").className = "heading pass"; |
+} |
+ |
+// Function to call if the user fails the tutorial. |
+TryItDisplay.fail = function() { |
+ document.getElementById("passOrFail").className = "heading fail"; |
+} |
+ |
+// Constructor for the Iframe object. |
+function Iframe() { |
+ this.doc = document.createElement('iframe'); |
+ // Checks will store all the tests done on the animations in the iframe. |
+ // Developers can add to it using the addCheck function. |
+ this.checks = []; |
+ // Time stores the defualt animation time. It controls how long the hidden |
+ // animation runs and therefore the default animation timer. |
+ this.time = 5; |
+ |
+ this.pass = false; |
+ |
+ this.doc.setAttribute('id', 'display'); |
+ this.doc.setAttribute('class', 'display'); |
+ this.doc.setAttribute('src', 'iframe-contents.html'); |
+} |
+ |
+Iframe.prototype.getDom = function() { |
+ return this.doc; |
+} |
+ |
+// Make the solution box toggleable. |
+var toggleSolution = function() { |
+ var element = document.getElementById('toggleText'); |
+ var elementStyle = getComputedStyle(element, null); |
+ var label = document.getElementById('hideLabel'); |
+ |
+ if (elementStyle.display === 'none') { |
+ element.style.display = 'block'; |
+ label.innerHTML = 'Hide Solution'; |
+ } else if (elementStyle.display === 'block') { |
+ element.style.display = 'none'; |
+ label.innerHTML = 'Show Solution'; |
+ } |
+} |