Akshit Tripathi 11 years ago
parent
commit
5357a3a15b
2 changed files with 86 additions and 32 deletions
  1. 46 18
      input.html
  2. 40 14
      js/script.js

+ 46 - 18
input.html

@@ -6,28 +6,56 @@
 <head>
 	<meta charset="utf-8" script=>
 	<link rel="stylesheet" type="text/css" href="./style.css">
-	<script language="JavaScript" type="text/javascript">
-	$("textarea").keydown(function(e){
-		var $this, end, start, v;
-		if (e.keyCode === 9){
-			start = this.selectionStart;
-			end = this.selectionEnd;
-			$this = $(this);
-			v = $this.val();
-
-			$this.val(v.substring(0,start) 
-					+ "\t"
-					+ v.substring(end));
-			this.selectionStart = this.selectionEnd = start + 1;
-			e.preventDefault();
-            }
-        });
-	</script>
+	<script language="javascript" type="text/javascript" src="/js/script.js"></script>
 </head>
 <body>
 	<form name="form1" method="post" target="output" action="output.php?saving=1">
 		<br/><br/>
-		<textarea name="textarea" cols="80" rows="10" placeholder="Write your program here" spellcheck="false"></textarea>
+		<textarea name="textarea" onfocus="script.js" id="text-area" cols="80" rows="10" placeholder="Write your program here" spellcheck="false"></textarea>
+		<!-- Thanks to Emmet (http://stackoverflow.com/users/2749/emmett) for the tabbing js. -->
+		<script type="text/javascript">
+			document.getElementById("text-area").onkeydown = function(e) {
+				if (!e && event.keyCode == 9)
+				{
+					event.returnValue = false;
+					insertAtCursor(document.getElementById("text-area"), "	");
+				}
+				else if (e.keyCode == 9)
+				{
+					e.preventDefault();
+					insertAtCursor(document.getElementById("text-area"), "	");
+				}
+	    	    };
+
+	        	//http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript#comment-3817
+	        	function insertAtCursor(myField, myValue) {
+					//IE support
+					if (document.selection) {
+						var temp;
+						myField.focus();
+						sel = document.selection.createRange();
+						temp = sel.text.length;
+						sel.text = myValue;
+						if (myValue.length == 0) {
+						sel.moveStart('character', myValue.length);
+						sel.moveEnd('character', myValue.length);
+					} else {
+						sel.moveStart('character', -myValue.length + temp);
+					}
+					sel.select();
+					}
+	   	       //MOZILLA/NETSCAPE support
+					else if (myField.selectionStart || myField.selectionStart == '0') {
+						var startPos = myField.selectionStart;
+						var endPos = myField.selectionEnd;
+						myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
+						myField.selectionStart = startPos + myValue.length;
+						myField.selectionEnd = startPos + myValue.length;
+					} else {
+						myField.value += myValue;
+				}
+			}
+        </script>
 		<br/><br/><br/>
 		<input type="text" name="stdin" autocomplete="on" placeholder="Standard input" wrap="hard">
 		<br/><br/>

+ 40 - 14
js/script.js

@@ -1,15 +1,41 @@
-$("textarea").keydown(function(e)){
-            var $this, end, start, v;
-            if (e.keyCode === 9){
-                start = this.selectionStart;
-                end = this.selectionEnd;
-                $this = $(this);
-                v = $this.val();
-                
-                $this.val(v.substring(0,start) 
-                          + "\t"
-                          + v.substring(end));
-                this.selectionStart = this.selectionEnd = start + 1;
-                e.preventDefault();
+document.getElementById("text-area").onkeydown = function(e) {
+          if (!e && event.keyCode == 9)
+          {
+            event.returnValue = false;
+            insertAtCursor(document.getElementById("text-area"), "  ");
+          }
+          else if (e.keyCode == 9)
+          {
+            e.preventDefault();
+            insertAtCursor(document.getElementById("text-area"), "  ");
+          }
+        };
+
+        //http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript#comment-3817
+        function insertAtCursor(myField, myValue) {
+          //IE support
+          if (document.selection) {
+            var temp;
+            myField.focus();
+            sel = document.selection.createRange();
+            temp = sel.text.length;
+            sel.text = myValue;
+            if (myValue.length == 0) {
+              sel.moveStart('character', myValue.length);
+              sel.moveEnd('character', myValue.length);
+            } else {
+              sel.moveStart('character', -myValue.length + temp);
             }
-        });
+            sel.select();
+          }
+          //MOZILLA/NETSCAPE support
+          else if (myField.selectionStart || myField.selectionStart == '0') {
+            var startPos = myField.selectionStart;
+            var endPos = myField.selectionEnd;
+            myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
+            myField.selectionStart = startPos + myValue.length;
+            myField.selectionEnd = startPos + myValue.length;
+          } else {
+            myField.value += myValue;
+          }
+        }