diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29c05eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules/ +package.json +package-lock.json +build/ +DS_Store +plugins/ \ No newline at end of file diff --git a/experiment-descriptor.json b/experiment-descriptor.json index 10b24f4..cd17bb9 100755 --- a/experiment-descriptor.json +++ b/experiment-descriptor.json @@ -2,6 +2,7 @@ "unit-type": "lu", "label": "", "basedir": ".", + "LaTeXinMD": true, "units": [ { "unit-type": "aim" @@ -47,7 +48,13 @@ "label": "Posttest", "unit-type": "task", "content-type": "assesment" + }, + { + "target": "references.html", + "source": "references.md", + "label": "References", + "unit-type": "task", + "content-type": "text" } ] } - diff --git a/experiment/aim.md b/experiment/aim.md index 13b54fa..cfd23a2 100644 --- a/experiment/aim.md +++ b/experiment/aim.md @@ -1,48 +1 @@ -Welcome to recursion. One of the most easiest things to code but really hard to debug! Recursion is a very powerful tool to solve problems. All loops(while, for , do while) can be simulated using recursion. Also the main step of the dynamic programming is recursion which is useful in solving many algorithmically difficult problems. Lets solve some problems now. - -**Problem 1:** - -You are given scales for weighing loads. On the left side lies a single stone of known weight W < 2N. You own a set of N different weights, weighing 1, 2, 4, ..., 2N-1 units of mass respectively. Determine how many possible ways there are of placing some weights on the sides of the scales, so as to balance them (put them in a state of equilibrium). - - -**Input Specification** - -The input line contains two integers: N W, where N denotes the number of weights and W represents the weight to be placed on the left side. - - -**Output Specification** - -Output must be a single integer denoting the number ways in which one can balance the weight W by placing weights on any side. - - -**Sample Input and Output** - -Input: 2 4 -Output: 3 -Input: 5 10 -Output: 14 - - -**Problem 2:** - -Given a weighing pan, n weights and a destination weight D, print "YES" or "NO" depending whether you can weight D using other weights given. - - -**Input Specification** - -Input begins with numbers of weights n, then n values denoting mass of each weight and then in the end destination weight D. - - -**Output Specification** - -As the output, print "YES" if it is possible to weight D, otherwise "NO". - - -**Sample Input and Output** - -Input: 3 1 3 4 2 -Output: YES -Input: 2 1 3 5 -Output: NO - - +To understand and apply the principles of recursion to solve computational problems, analyze recursive processes, and appreciate the power and elegance of recursive thinking in computer programming. diff --git a/experiment-image.png b/experiment/images/experiment-image.png similarity index 100% rename from experiment-image.png rename to experiment/images/experiment-image.png diff --git a/experiment/objective.md b/experiment/objective.md index d5ad2dd..41c1861 100644 --- a/experiment/objective.md +++ b/experiment/objective.md @@ -1 +1,5 @@ -- To learn to solve problems related to Recursion using Computer Programming. \ No newline at end of file +- To understand the concept of recursion and identify problems that can be solved recursively. +- To develop and implement recursive algorithms for classic computational problems. +- To analyze the flow and efficiency of recursive solutions, including base cases and recursive cases. +- To compare recursion with iteration and recognize when recursion is advantageous. +- To strengthen problem-solving skills by applying recursion to real-world scenarios and algorithmic challenges. diff --git a/experiment/posttest.json b/experiment/posttest.json index 25ad02a..a798f0b 100644 --- a/experiment/posttest.json +++ b/experiment/posttest.json @@ -1,46 +1,175 @@ -[ -{"question":"1. A continue statement causes execution to skip to:", -"answers":{ - "a":"the end of the program", - "b":"the first statement after the loop", - "c":"the statement following the continue statement", - "d":"the next iteration of the loop" - }, -"correctAnswer":"d"}, - -{"question":"2. The statement i++; is equivalent to:", -"answers":{ - "a":"i = i + i;", - "b":"i = i + 1;", - "c":"i = i - 1;", - "d":"i - - ;" - }, -"correctAnswer":"b"}, - -{"question":"3. Another word for 'looping' is:", -"answers":{ - "a":"recapitulation ", - "b":"tintinabulation ", - "c":"iteration", - "d":"reiteration" - }, -"correctAnswer":"c"}, - -{"question":"4. Which looping process is best used when the number of iterations is known?", -"answers":{ - "a":"for", - "b":"while", - "c":"do-while", - "d":"all of the above" - }, -"correctAnswer":"a"}, - -{"question":"5. Which of the following is not an infinite loop.", -"answers":{ - "a":"int i = 1 ; while ( 1 ) { i++ ; }", - "b":"for( int i =1; i < 10 ; i--) printf('Hello World');", - "c":"for(int i =1; i<100; i++) printf('Hello World');", - "d":"int i = 0; do{ i-- printf('%d ',i); }while(i>0);" - }, -"correctAnswer":"c"} -] +{ + "version": 2.0, + "questions": [ + { + "question": "1. Which of the following best describes a base case in recursion?", + "answers": { + "a": "A function that calls itself", + "b": "A variable declaration", + "c": "A condition where recursion stops", + "d": "A loop inside a function" + }, + "correctAnswer": "c", + "explanations": { + "a": "Incorrect. That describes recursion, not the base case.", + "b": "Incorrect. Variables are unrelated.", + "c": "Correct. The base case is where recursion terminates.", + "d": "Incorrect. Loops are not required for recursion." + }, + "difficulty": "beginner" + }, + { + "question": "2. What is the output of the following recursive function call: factorial(3)?\nfunction factorial(n) { if (n == 0) return 1; else return n * factorial(n-1); }", + "answers": { + "a": "0", + "b": "1", + "c": "3", + "d": "6" + }, + "correctAnswer": "d", + "explanations": { + "a": "Incorrect. 0 is not the result.", + "b": "Incorrect. 1 is the base case result.", + "c": "Incorrect. 3 is not the result of factorial(3).", + "d": "Correct. 3 * 2 * 1 = 6." + }, + "difficulty": "beginner" + }, + { + "question": "3. Which of the following is NOT a property of recursion?", + "answers": { + "a": "Always faster than iteration", + "b": "Requires a base case", + "c": "Can be used to solve combinatorial problems", + "d": "Can lead to stack overflow" + }, + "correctAnswer": "a", + "explanations": { + "a": "Incorrect. Recursion is not always faster than iteration.", + "b": "Correct. Recursion requires a base case.", + "c": "Correct. Recursion is used in combinatorial problems.", + "d": "Correct. Stack overflow is a risk in recursion." + }, + "difficulty": "intermediate" + }, + { + "question": "4. In the context of recursion, what is a call stack overflow?", + "answers": { + "a": "When a function returns a value", + "b": "When a loop runs infinitely", + "c": "When too many recursive calls exhaust the stack memory", + "d": "When a variable is not initialized" + }, + "correctAnswer": "c", + "explanations": { + "a": "Incorrect. Returning a value does not cause overflow.", + "b": "Incorrect. Infinite loops are not stack overflows.", + "c": "Correct. Too many recursive calls can exhaust stack memory.", + "d": "Incorrect. Variable initialization is unrelated." + }, + "difficulty": "intermediate" + }, + { + "question": "5. Which of the following problems is best solved using recursion?", + "answers": { + "a": "Variable assignment", + "b": "Simple addition", + "c": "Finding the maximum in an array", + "d": "Tower of Hanoi" + }, + "correctAnswer": "d", + "explanations": { + "a": "Incorrect. Assignment does not require recursion.", + "b": "Incorrect. Addition is a simple operation.", + "c": "Incorrect. Maximum can be found iteratively.", + "d": "Correct. Tower of Hanoi is a classic recursive problem." + }, + "difficulty": "intermediate" + }, + { + "question": "6. What is the main advantage of tail recursion?", + "answers": { + "a": "It always runs faster", + "b": "It can be optimized to use less stack space", + "c": "It requires no base case", + "d": "It never terminates" + }, + "correctAnswer": "b", + "explanations": { + "a": "Incorrect. Not always faster.", + "b": "Correct. Tail recursion can be optimized by compilers.", + "c": "Incorrect. Base case is still required.", + "d": "Incorrect. Tail recursion can terminate." + }, + "difficulty": "advanced" + }, + { + "question": "7. Which of the following recursive algorithms is used to solve the balancing weights problem?", + "answers": { + "a": "Sorting the weights", + "b": "Ignoring the weights", + "c": "Exploring all combinations of placing weights", + "d": "Adding all weights to one side" + }, + "correctAnswer": "c", + "explanations": { + "a": "Incorrect. Sorting is not required.", + "b": "Incorrect. Ignoring weights does not solve the problem.", + "c": "Correct. The recursive solution explores all combinations.", + "d": "Incorrect. All weights on one side is not the only solution." + }, + "difficulty": "advanced" + }, + { + "question": "8. Which of the following is true about the subset sum problem in recursion?", + "answers": { + "a": "It only works for two weights", + "b": "It is not related to recursion", + "c": "It cannot be solved recursively", + "d": "It can be solved by considering all combinations recursively" + }, + "correctAnswer": "d", + "explanations": { + "a": "Incorrect. It works for any number of weights.", + "b": "Incorrect. It is related to recursion.", + "c": "Incorrect. It can be solved recursively.", + "d": "Correct. Subset sum is a classic recursive problem." + }, + "difficulty": "advanced" + }, + { + "question": "9. What is the main risk of using recursion without careful design?", + "answers": { + "a": "All of the above", + "b": "Stack overflow", + "c": "Incorrect results", + "d": "Infinite loops" + }, + "correctAnswer": "a", + "explanations": { + "a": "Correct. All are risks of poor recursion design.", + "b": "Correct. Stack overflow is a risk.", + "c": "Correct. Incorrect results are possible.", + "d": "Correct. Infinite loops can occur." + }, + "difficulty": "advanced" + }, + { + "question": "10. Which of the following is NOT a typical use case for recursion?", + "answers": { + "a": "Simple variable assignment", + "b": "Sorting algorithms like Merge Sort", + "c": "Solving combinatorial problems", + "d": "Tree traversal" + }, + "correctAnswer": "a", + "explanations": { + "a": "Incorrect. Assignment does not require recursion.", + "b": "Correct. Merge Sort uses recursion.", + "c": "Correct. Combinatorial problems often use recursion.", + "d": "Correct. Tree traversal is a classic use of recursion." + }, + "difficulty": "advanced" + } + ] +} diff --git a/experiment/pretest.json b/experiment/pretest.json index 3f71cc3..3ec44fb 100644 --- a/experiment/pretest.json +++ b/experiment/pretest.json @@ -1,47 +1,175 @@ -[ -{"question":"1. The execution of a loop typically starts with:", -"answers":{ - "a":"initialization statements", - "b":"Loop body", - "c":"test condition", - "d":"update statements" - }, -"correctAnswer":"a"}, - -{"question":"2. The break statement is used to exit from:", -"answers":{ - "a":"an if statement", - "b":"a for loop", - "c":"a program", - "d":"the main( ) function" - }, -"correctAnswer":"b"}, - -{"question":"3. A do-while loop is useful when we want that the statements within the loop must be executed", -"answers":{ - "a":"only once", - "b":"At Least Once", - "c":"More than once", - "d":"None of the above" - }, -"correctAnswer":"b"}, - -{"question":"4. In what sequence the initialization, testing and execution of body is done in a do-while loop ", -"answers":{ - "a":"Initialization, execution of body, testing", - "b":"Execution of body, initialization, testing", - "c":"Initialization, testing, execution of body", - "d":"None of the above" - }, -"correctAnswer":"a"}, - -{"question":"5. Which looping process checks the test condition at the end of the loop?", -"answers":{ - "a":"for", - "b":"while", - "c":"do-while", - "d":"No looping peocess check condition at the end" - }, -"correctAnswer":"c"} - -] +{ + "version": 2.0, + "questions": [ + { + "question": "1. What is recursion in computer programming?", + "answers": { + "c": "A function calling itself", + "a": "A function calling another function", + "d": "A loop inside a function", + "b": "A function with no return value" + }, + "correctAnswer": "c", + "explanations": { + "c": "Correct. Recursion is when a function calls itself.", + "a": "Incorrect. That is function composition, not recursion.", + "d": "Incorrect. Loops are not recursion.", + "b": "Incorrect. Return value is not related to recursion." + }, + "difficulty": "beginner" + }, + { + "question": "2. Which of the following is essential for a recursive function to work correctly?", + "answers": { + "d": "A base case", + "b": "A loop", + "a": "A global variable", + "c": "A print statement" + }, + "correctAnswer": "d", + "explanations": { + "d": "Correct. A base case prevents infinite recursion.", + "b": "Incorrect. Loops are not required for recursion.", + "a": "Incorrect. Global variables are not required.", + "c": "Incorrect. Print statements are not required." + }, + "difficulty": "beginner" + }, + { + "question": "3. What will happen if a recursive function does not have a base case?", + "answers": { + "b": "It will run infinitely or cause a stack overflow", + "d": "It will return 0", + "a": "It will print nothing", + "c": "It will run faster" + }, + "correctAnswer": "b", + "explanations": { + "b": "Correct. Without a base case, recursion never stops and causes a stack overflow.", + "d": "Incorrect. It does not return 0 by default.", + "a": "Incorrect. Output is not guaranteed to be nothing.", + "c": "Incorrect. Infinite recursion is not faster." + }, + "difficulty": "beginner" + }, + { + "question": "4. Which of the following problems is best solved using recursion?", + "answers": { + "c": "Calculating factorial of a number", + "a": "Printing Hello World", + "d": "Adding two numbers", + "b": "Assigning a value to a variable" + }, + "correctAnswer": "c", + "explanations": { + "c": "Correct. Factorial is a classic recursive problem.", + "a": "Incorrect. Printing does not require recursion.", + "d": "Incorrect. Addition is a simple operation.", + "b": "Incorrect. Assignment does not require recursion." + }, + "difficulty": "beginner" + }, + { + "question": "5. What is the base case in the recursive computation of factorial(n)?", + "answers": { + "b": "n == 0", + "a": "n == 1", + "d": "n < 0", + "c": "n > 1" + }, + "correctAnswer": "b", + "explanations": { + "b": "Correct. The factorial of 0 is defined as 1, which is the base case.", + "a": "Incorrect. n == 1 is not the standard base case, though factorial(1) = 1.", + "d": "Incorrect. Factorial is not defined for negative numbers.", + "c": "Incorrect. n > 1 is not a base case." + }, + "difficulty": "beginner" + }, + { + "question": "6. Which of the following best describes the call stack in recursion?", + "answers": { + "d": "A structure that keeps track of active function calls", + "c": "A list of variables", + "a": "A type of loop", + "b": "A sorting algorithm" + }, + "correctAnswer": "d", + "explanations": { + "d": "Correct. The call stack tracks recursive calls.", + "c": "Incorrect. Variables are not the call stack.", + "a": "Incorrect. Loops are not the call stack.", + "b": "Incorrect. Sorting is unrelated." + }, + "difficulty": "intermediate" + }, + { + "question": "7. Which of the following is a disadvantage of recursion?", + "answers": { + "b": "It can use more memory due to the call stack", + "a": "It always runs faster than iteration", + "d": "It cannot solve any problems", + "c": "It is never used in practice" + }, + "correctAnswer": "b", + "explanations": { + "b": "Correct. Recursion can use more memory than iteration.", + "a": "Incorrect. Recursion is not always faster.", + "d": "Incorrect. Recursion solves many problems.", + "c": "Incorrect. Recursion is widely used." + }, + "difficulty": "intermediate" + }, + { + "question": "8. Which of the following is an example of a divide-and-conquer algorithm that uses recursion?", + "answers": { + "a": "Bubble Sort", + "b": "Assignment", + "c": "Merge Sort", + "d": "Linear Search" + }, + "correctAnswer": "c", + "explanations": { + "a": "Incorrect. Bubble Sort is iterative.", + "b": "Incorrect. Assignment is not an algorithm.", + "c": "Correct. Merge Sort is a classic recursive algorithm.", + "d": "Incorrect. Linear Search is usually iterative." + }, + "difficulty": "intermediate" + }, + { + "question": "9. What is tail recursion?", + "answers": { + "a": "A recursive call inside a loop", + "b": "A recursive call with multiple parameters", + "c": "A recursive call with no base case", + "d": "A recursive call that is the last operation in the function" + }, + "correctAnswer": "d", + "explanations": { + "a": "Incorrect. Loops are not required.", + "b": "Incorrect. Parameters do not define tail recursion.", + "c": "Incorrect. Base case is unrelated.", + "d": "Correct. Tail recursion means the recursive call is the last thing executed." + }, + "difficulty": "advanced" + }, + { + "question": "10. Which of the following problems can be solved using recursion?", + "answers": { + "a": "Balancing weights on a scale", + "b": "Tower of Hanoi", + "c": "All of the above", + "d": "Fibonacci sequence" + }, + "correctAnswer": "c", + "explanations": { + "a": "Correct. Balancing weights is solved recursively.", + "b": "Correct. Tower of Hanoi is solved recursively.", + "c": "Correct. All of these can be solved using recursion.", + "d": "Correct. Fibonacci sequence is solved recursively." + }, + "difficulty": "advanced" + } + ] +} diff --git a/experiment/procedure.md b/experiment/procedure.md index dabc1aa..61cb1bf 100644 --- a/experiment/procedure.md +++ b/experiment/procedure.md @@ -1 +1,26 @@ -For each problem you have to write a program in C or C++. Each question is evaluted on test cases. An answer is correct only when all the test cases are cleared. +To successfully complete the simulation for this experiment, follow these steps: + +1. **Read the Problem Statement:** + - Carefully read the description and requirements for each problem. + +2. **Fill in the Blanks:** + - For each problem, you will be shown a partially completed C/C++ code with several blanks. + - Enter the correct code for each blank based on your understanding of the problem. + +3. **Use Hints if Needed:** + - If you are stuck, use the 'Hint' dropdown to get step-by-step guidance for each blank. + +4. **Compile and Run:** + - Click the 'Compile' button to check your answers for the blanks. + - If all blanks are correct, the 'Run' button will be enabled. + - Click 'Run' to see the expected output for the completed code. + +5. **View Results and Feedback:** + - After compiling, you will see feedback for each blank, indicating which are correct and which need revision. + - The runtime output will show what the program would produce for sample inputs. + +6. **Iterate and Improve:** + - Modify your answers as needed and re-compile until all blanks are correct. + +**Note:** +Your answer is considered correct only when all blanks are filled correctly. Make sure to follow the input/output format and logic strictly. diff --git a/experiment/references.md b/experiment/references.md index b15b47e..1ea8bd9 100644 --- a/experiment/references.md +++ b/experiment/references.md @@ -1 +1,16 @@ -### Link your references in here \ No newline at end of file +1. **Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Introduction to Algorithms (3rd Edition).** + - Comprehensive coverage of recursion, divide-and-conquer, and algorithmic problem solving. + +2. **Steven S. Skiena, The Algorithm Design Manual.** + - Practical insights and examples of recursive algorithms in real-world problems. + +3. **Wikipedia: Recursion (Computer Science)** + - https://en.wikipedia.org/wiki/Recursion_(computer_science) + - Overview, examples, and applications of recursion. + +4. **NPTEL: Programming, Data Structures and Algorithms** + - https://nptel.ac.in/courses/106/106/106106145/ + - Video lectures and notes on recursion and algorithmic thinking. + +5. **Paul Zeitz, The Art and Craft of Problem Solving.** + - Problem-solving strategies and recursive thinking. diff --git a/experiment/simulation/css/main.css b/experiment/simulation/css/main.css index 20bf42b..5f004e7 100644 --- a/experiment/simulation/css/main.css +++ b/experiment/simulation/css/main.css @@ -1 +1,105 @@ -/* You CSS goes in here */ \ No newline at end of file +.simulation-center-wrapper { + display: flex; + flex-direction: column; + align-items: center; + max-width: 1200px; + margin-left: auto; + margin-right: auto; +} + +@media (max-width: 991px) { + .simulation-center-wrapper { + max-width: 100%; + margin-left: 0; + margin-right: 0; + align-items: stretch; + } +} + +.feedback-correct { + color: #218838; + font-weight: 500; +} +.feedback-incorrect { + color: #c82333; + font-weight: 500; +} +.feedback-expected { + color: #004085; + font-size: 0.98em; + margin-left: 0.5em; +} +.feedback-all-correct { + color: #155724; + font-weight: bold; + margin-top: 0.5em; +} + +body { + background: #f8f9fa; +} + +.simulation-container { + max-width: 1200px; +} + +.problem-statement { + font-size: 1.1rem; + background: #fff; + border-radius: 6px; + padding: 1rem; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); + margin-bottom: 1rem; +} + +.code-area { + background: #23272f; + color: #f8f8f2; + border-radius: 6px; + padding: 1rem 1.5rem; + font-family: "Fira Mono", "Consolas", monospace; + font-size: 1rem; + overflow-x: auto; + margin-bottom: 1rem; +} + +.template-line { + white-space: pre; + margin-bottom: 0.1rem; +} + +.blank-input, +.code-blank { + width: 120px; + margin: 0 4px; + border-radius: 4px; + border: 1px solid #ccc; + padding: 2px 6px; + font-family: inherit; + font-size: 1rem; + display: inline-block; +} + +.hints-area { + background: #fff; + border-radius: 6px; + padding: 1rem; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); +} + +.hint { + background: #e9ecef; + border-radius: 4px; + padding: 0.5em 0.75em; + margin-bottom: 0.5em; + font-size: 1rem; +} + +.output-area { + background: #fff; + border-radius: 6px; + padding: 0.75rem 1rem; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); + margin-bottom: 1rem; + min-height: 2.2em; +} diff --git a/experiment/simulation/exp6/12.c b/experiment/simulation/exp6/12.c deleted file mode 100755 index 1627862..0000000 --- a/experiment/simulation/exp6/12.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -int N; - -/*the variable index denotes that I have weights - 2^index , 2^(index+1), 2^(index+2),...,2^(N-1) - and W denotes the weight we need to achieve. -*/ -int no_ways(int W,int index){ - - /*If need to achieve W=0 we simply dont choose any weights - and it is a solution.. so we return 1. - */ - - /* - if index==N we could not achieve the weight W and so we return 0 - - */ - if(!W) - return 1; - if(index==N) - return 0; - - int i,ans=0; - /* - The variable i indicates that I have choosen - i weights of 2^index - If I choose i weights of 2^index the - weight we need to achieve becomes W-i*(2^index) - */ - for(i=0;i*(1<=0 , x2>=0,...xN>=0. - Hint3: - We reformulate the task in a slightly different - way. How many ways can we achieve a weight W - given that we can choose any weights from - 2^i,2^(i+1),..2^(N-1). Suppose we choose x(i) - number of weights of type 2^i we would need to - achieve a weight of W-x(i)*2^i from 2^(i+1),2^(i+2), - ...,2^(N-1) which leads us to the simple recursive - equation no_ways[W][i] = sigma(no_ways[W-x*2^i][i+1]) - , x varies from 0 to W/2^i - -*/ diff --git a/experiment/simulation/exp6/Experiment.html b/experiment/simulation/exp6/Experiment.html deleted file mode 100644 index 12f98b9..0000000 --- a/experiment/simulation/exp6/Experiment.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Feedback.html b/experiment/simulation/exp6/Feedback.html deleted file mode 100644 index ad56578..0000000 --- a/experiment/simulation/exp6/Feedback.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
-
-
- - - -
- -

Computer Science & EngineeringProblem Solving Lab →List Of Experiments

- -
- - -
- - -

Recursion

- - -

Dear User,

- -

- Thanks for using Virtual Labs. Your opinion is valuable to us. To help us improve, we'd like to ask you a few questions about your experience. It will only take 3 minutes and your answers will help us make Virtual Labs better for you and other users. -

-
- - - - -
-
- -

- Thanks for your time ! -
- The Virtual Labs Team -

- - -
-
-
- - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Further Readings.html b/experiment/simulation/exp6/Further Readings.html deleted file mode 100644 index a4373d8..0000000 --- a/experiment/simulation/exp6/Further Readings.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Hints1/Hint_0.html b/experiment/simulation/exp6/Hints1/Hint_0.html deleted file mode 100755 index 824a20e..0000000 --- a/experiment/simulation/exp6/Hints1/Hint_0.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - -

-
\ No newline at end of file
diff --git a/experiment/simulation/exp6/Hints1/Hint_1.html b/experiment/simulation/exp6/Hints1/Hint_1.html
deleted file mode 100755
index 4a8f98a..0000000
--- a/experiment/simulation/exp6/Hints1/Hint_1.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-	
-
-
-	
#include<stdio.h>
-int no_ways(int W,int index){
-
-	->termination conditions
-	->for each possibility 
-	  of choosing i items of weight
-	  2^index find the number of solutions
-	 
-	->return the total number of solutions
-	
-}
-int main(){
-->scan N,W 
-->call the recursive function with appropriate
-  parameters
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints1/Hint_2.html b/experiment/simulation/exp6/Hints1/Hint_2.html deleted file mode 100755 index 4901bba..0000000 --- a/experiment/simulation/exp6/Hints1/Hint_2.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - -
#include<stdio.h>
-int no_ways(int W,int index){
-
-	->termination conditions
-	
-	for i=0;i*2^index<=W;i++
-		->choosing i items each
-		  of weight 2^index
-	 	no_ways(W-i*2^index,index+1)
-
-	->return the total number of solutions
-	
-}
-int main(){
-->scan N,W 
-->call the recursive function with appropriate
-  parameters
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints1/Hint_3.html b/experiment/simulation/exp6/Hints1/Hint_3.html deleted file mode 100755 index 563e1d8..0000000 --- a/experiment/simulation/exp6/Hints1/Hint_3.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - -
#include<stdio.h>
-int no_ways(int W,int index){
-
-	->termination conditions
-	
-	int ans = 0;
-	for i=0;i*2^index<=W;i++
-		->choosing i items each
-		  of weight 2^index
-	 	ans+=no_ways(W-i*2^index,index+1)
-
-	->return ans
-	
-}
-int main(){
-->scan N,W 
-->call the recursive function with appropriate
-  parameters
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints1/Hint_4.html b/experiment/simulation/exp6/Hints1/Hint_4.html deleted file mode 100755 index 049446a..0000000 --- a/experiment/simulation/exp6/Hints1/Hint_4.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - -
#include<stdio.h>
-int N;
-int no_ways(int W,int index){
-	
-	if(!W)
-		return 1;
-	if(index==N)
-		return 0;
-
-	int ans = 0,i;
-	for(i=0;i*(1<<index)<=W;i++)
-		ans+=no_ways(W-i*(1<<index),index+1);
-
-	return ans;
-	
-}
-int main(){
-	int W;
-	scanf("%d%d",&N,&W);
-
-	printf("%d\n",no_ways(W,0));
-	return 0;
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints1/Hint_5.html b/experiment/simulation/exp6/Hints1/Hint_5.html deleted file mode 100755 index 9186342..0000000 --- a/experiment/simulation/exp6/Hints1/Hint_5.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - -
#include<stdio.h>
-int N;
-int no_ways(int W,int index){
-	
-	if(!W)
-		return 1;
-	if(index==N)
-		return 0;
-
-	int ans = 0,i;
-	for(i=0;i*(1<<index)<=W;i++)
-		ans+=no_ways(W-i*(1<<index),index+1);
-
-	return ans;
-	
-}
-int main(){
-	int W;
-	scanf("%d%d",&N,&W);
-
-	printf("%d\n",no_ways(W,0));
-	return 0;
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints2/Hint_0.html b/experiment/simulation/exp6/Hints2/Hint_0.html deleted file mode 100755 index 824a20e..0000000 --- a/experiment/simulation/exp6/Hints2/Hint_0.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - -

-
\ No newline at end of file
diff --git a/experiment/simulation/exp6/Hints2/Hint_1.html b/experiment/simulation/exp6/Hints2/Hint_1.html
deleted file mode 100755
index 4970826..0000000
--- a/experiment/simulation/exp6/Hints2/Hint_1.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-	
-
-
-	
#include<stdio.h>
-int isPossible(int N,int D,int *weight)
-	-> Trivial/termination cases handled first
-	   like when N=0 or D=0
-	->try all possibilities with the given weight
-	  weight[N-1] 
-int main(){
-	->scan N and weights and call isPossible
-	  function
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints2/Hint_2.html b/experiment/simulation/exp6/Hints2/Hint_2.html deleted file mode 100755 index 004cb28..0000000 --- a/experiment/simulation/exp6/Hints2/Hint_2.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - -
#include<stdio.h>
-
-->Assume a weight of D on right PAN
-int isPossible(int N,int D,int *weight){
-	-> Trivial/termination cases handled first
-	   like when N=0 or D=0
-	-> Explore the possibilities 
-	   keeping weight on right side of PAN 
-		   ->isPossible(N-1,D+weight[N-1],weight)
-	   keeping the weight on left side of PAN
-	    	   ->isPossible(N-1,D-weight[N-1],weight)
-	   Not keeping the weight on any PAN
-	           ->isPossible(N-1,D,weight)
-}
-
-int main(){
-	->scan N and weights and call isPossible
-	  function
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints2/Hint_3.html b/experiment/simulation/exp6/Hints2/Hint_3.html deleted file mode 100755 index 96f1012..0000000 --- a/experiment/simulation/exp6/Hints2/Hint_3.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - -
#include<stdio.h>
-
-->Assume a weight of D on right PAN
-int isPossible(int N,int D,int *weight){
-	-> Trivial/termination cases handled first
-	   like when N=0 or D=0
-  	return isPossible(N-1,D+weight[N-1],weight)||isPossible(N-1,D-weight[N-1],weight)||isPossible(N-1,D,weight)
-}
-
-int main(){
-	->scan N and weights and call isPossible
-	  function
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints2/Hint_4.html b/experiment/simulation/exp6/Hints2/Hint_4.html deleted file mode 100755 index b885808..0000000 --- a/experiment/simulation/exp6/Hints2/Hint_4.html +++ /dev/null @@ -1,26 +0,0 @@ - - -
#include<stdio.h>
-
-int isPossible(int N,int D,int *weight){
-	if(!N)
-		return !D;
-  	return isPossible(N-1,D+weight[N-1],weight)||isPossible(N-1,D-weight[N-1],weight)||isPossible(N-1,D,weight);
-}
-
-int main(){
-	int N;
-	scanf("%d",&N);
-	int weights[N],i,D;
-	for(i=0;i<N ;i++){
-		scanf("%d",weights+i);
-	}
-	scanf("%d",&D);
-	if(isPossible(N,D,weights))
-		puts("YES");
-	else
-		puts("NO");
-	return 0;
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Hints2/Hint_5.html b/experiment/simulation/exp6/Hints2/Hint_5.html deleted file mode 100755 index a668e93..0000000 --- a/experiment/simulation/exp6/Hints2/Hint_5.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - -
#include<stdio.h>
-
-int isPossible(int N,int D,int *weight){
-	if(!N)
-		return !D;
-  	return isPossible(N-1,D+weight[N-1],weight)||isPossible(N-1,D-weight[N-1],weight)||isPossible(N-1,D,weight);
-}
-
-int main(){
-	int N;
-	scanf("%d",&N);
-	int weights[N],i,D;
-	for(i=0;i<N ;i++){
-		scanf("%d",weights+i);
-	}
-	scanf("%d",&D);
-	if(isPossible(N,D,weights))
-		puts("YES");
-	else
-		puts("NO");
-}
-
- \ No newline at end of file diff --git a/experiment/simulation/exp6/Introduction.html b/experiment/simulation/exp6/Introduction.html deleted file mode 100644 index 68fbc47..0000000 --- a/experiment/simulation/exp6/Introduction.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
-
-
- - - -
- -

Computer Science & EngineeringProblem Solving Lab →List Of Experiments

-
- - -
- - -

Recursion

-
-

- -Welcome to recursion. One of the most easiest things to code but really hard to debug! Recursion is a very powerful tool to solve problems. All loops(while, for , do while) can be simulated using recursion. Also the main step of the dynamic programming is recursion which is useful in solving many algorithmically difficult problems. Lets solve some problems now. - -

-
-

Problem 1:

-
-

-You are given scales for weighing loads. On the left side lies a single stone of known weight W < 2N. You own a set of N different weights, weighing 1, 2, 4, ..., 2N−1 units of mass respectively. Determine how many possible ways there are of placing some weights on the sides of the scales, so as to balance them (put them in a state of equilibrium). -

-

-

Input Specification


-

-The input line contains two integers: N W, where N denotes the number of weights and W represents the weight to be placed on the left side. -

-

-

Output Specification


-

-Output must be a single integer denoting the number ways in which one can balance the weight W by placing weights on any side. -

-

-

Sample Input and Output


-

-Input: 2 4
-Output: 3
-Input: 5 10
-Output: 14
-

-

-

-
-

Problem 2:

-

-Given a weighing pan, n weights and a destination weight D, print “YES” or “NO” depending whether you can weight D using other weights given. -

-

-

Input Specification


-

-Input begins with numbers of weights n, then n values denoting mass of each weight and then in the end destination weight D. -

-

-

Output Specification


-

-As the output, print “YES” if it is possible to weight D, otherwise “NO”. -

-

-

Sample Input and Output


-

-Input: 3 1 3 4 2
-Output: YES
-Input: 2 1 3 5
-Output: NO
-

-

-

-

-
-
- - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Manual.html b/experiment/simulation/exp6/Manual.html deleted file mode 100644 index ba109b6..0000000 --- a/experiment/simulation/exp6/Manual.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
-
-
- - - -
- -

Computer Science & EngineeringProblem Solving Lab →List Of Experiments

- -
- - -
- - -

Recursion

-

- For each problem you have to write a program in C or C++. Each question is evaluted on test cases. An answer is correct only when all the test cases are cleared. -

-
-
-
- - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Objective.html b/experiment/simulation/exp6/Objective.html deleted file mode 100644 index 70b803a..0000000 --- a/experiment/simulation/exp6/Objective.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
-
-
- - - -
- -

Computer Science & EngineeringProblem Solving Lab →List Of Experiments

- -
- - -
- - -

Recursion

-

- To learn to solve problems related to Recursion using Computer Programming. -

-
-
-
- - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Problem1/12.c b/experiment/simulation/exp6/Problem1/12.c deleted file mode 100755 index 1627862..0000000 --- a/experiment/simulation/exp6/Problem1/12.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -int N; - -/*the variable index denotes that I have weights - 2^index , 2^(index+1), 2^(index+2),...,2^(N-1) - and W denotes the weight we need to achieve. -*/ -int no_ways(int W,int index){ - - /*If need to achieve W=0 we simply dont choose any weights - and it is a solution.. so we return 1. - */ - - /* - if index==N we could not achieve the weight W and so we return 0 - - */ - if(!W) - return 1; - if(index==N) - return 0; - - int i,ans=0; - /* - The variable i indicates that I have choosen - i weights of 2^index - If I choose i weights of 2^index the - weight we need to achieve becomes W-i*(2^index) - */ - for(i=0;i*(1<=0 , x2>=0,...xN>=0. - Hint3: - We reformulate the task in a slightly different - way. How many ways can we achieve a weight W - given that we can choose any weights from - 2^i,2^(i+1),..2^(N-1). Suppose we choose x(i) - number of weights of type 2^i we would need to - achieve a weight of W-x(i)*2^i from 2^(i+1),2^(i+2), - ...,2^(N-1) which leads us to the simple recursive - equation no_ways[W][i] = sigma(no_ways[W-x*2^i][i+1]) - , x varies from 0 to W/2^i - -*/ diff --git a/experiment/simulation/exp6/Problem1/Problem1_1.in b/experiment/simulation/exp6/Problem1/Problem1_1.in deleted file mode 100755 index 795ed34..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_1.in +++ /dev/null @@ -1 +0,0 @@ -5 10 diff --git a/experiment/simulation/exp6/Problem1/Problem1_1.out b/experiment/simulation/exp6/Problem1/Problem1_1.out deleted file mode 100755 index 8351c19..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_1.out +++ /dev/null @@ -1 +0,0 @@ -14 diff --git a/experiment/simulation/exp6/Problem1/Problem1_2.in b/experiment/simulation/exp6/Problem1/Problem1_2.in deleted file mode 100755 index 9290688..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_2.in +++ /dev/null @@ -1 +0,0 @@ -4 6 diff --git a/experiment/simulation/exp6/Problem1/Problem1_2.out b/experiment/simulation/exp6/Problem1/Problem1_2.out deleted file mode 100755 index 1e8b314..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_2.out +++ /dev/null @@ -1 +0,0 @@ -6 diff --git a/experiment/simulation/exp6/Problem1/Problem1_3.in b/experiment/simulation/exp6/Problem1/Problem1_3.in deleted file mode 100755 index dbe3ea5..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_3.in +++ /dev/null @@ -1 +0,0 @@ -5 15 diff --git a/experiment/simulation/exp6/Problem1/Problem1_3.out b/experiment/simulation/exp6/Problem1/Problem1_3.out deleted file mode 100755 index 6f4247a..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_3.out +++ /dev/null @@ -1 +0,0 @@ -26 diff --git a/experiment/simulation/exp6/Problem1/Problem1_4.in b/experiment/simulation/exp6/Problem1/Problem1_4.in deleted file mode 100755 index 5cadfb4..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_4.in +++ /dev/null @@ -1 +0,0 @@ -7 23 diff --git a/experiment/simulation/exp6/Problem1/Problem1_4.out b/experiment/simulation/exp6/Problem1/Problem1_4.out deleted file mode 100755 index fff0a24..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_4.out +++ /dev/null @@ -1 +0,0 @@ -74 diff --git a/experiment/simulation/exp6/Problem1/Problem1_6.in b/experiment/simulation/exp6/Problem1/Problem1_6.in deleted file mode 100755 index 6af3f94..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_6.in +++ /dev/null @@ -1 +0,0 @@ -4 10 diff --git a/experiment/simulation/exp6/Problem1/Problem1_6.out b/experiment/simulation/exp6/Problem1/Problem1_6.out deleted file mode 100755 index 8351c19..0000000 --- a/experiment/simulation/exp6/Problem1/Problem1_6.out +++ /dev/null @@ -1 +0,0 @@ -14 diff --git a/experiment/simulation/exp6/Problem1/a.out b/experiment/simulation/exp6/Problem1/a.out deleted file mode 100755 index 33f9e37..0000000 Binary files a/experiment/simulation/exp6/Problem1/a.out and /dev/null differ diff --git a/experiment/simulation/exp6/Problem1/judgeCode.c b/experiment/simulation/exp6/Problem1/judgeCode.c deleted file mode 100755 index 1627862..0000000 --- a/experiment/simulation/exp6/Problem1/judgeCode.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -int N; - -/*the variable index denotes that I have weights - 2^index , 2^(index+1), 2^(index+2),...,2^(N-1) - and W denotes the weight we need to achieve. -*/ -int no_ways(int W,int index){ - - /*If need to achieve W=0 we simply dont choose any weights - and it is a solution.. so we return 1. - */ - - /* - if index==N we could not achieve the weight W and so we return 0 - - */ - if(!W) - return 1; - if(index==N) - return 0; - - int i,ans=0; - /* - The variable i indicates that I have choosen - i weights of 2^index - If I choose i weights of 2^index the - weight we need to achieve becomes W-i*(2^index) - */ - for(i=0;i*(1<=0 , x2>=0,...xN>=0. - Hint3: - We reformulate the task in a slightly different - way. How many ways can we achieve a weight W - given that we can choose any weights from - 2^i,2^(i+1),..2^(N-1). Suppose we choose x(i) - number of weights of type 2^i we would need to - achieve a weight of W-x(i)*2^i from 2^(i+1),2^(i+2), - ...,2^(N-1) which leads us to the simple recursive - equation no_ways[W][i] = sigma(no_ways[W-x*2^i][i+1]) - , x varies from 0 to W/2^i - -*/ diff --git a/experiment/simulation/exp6/Problem1/judgeCode.out b/experiment/simulation/exp6/Problem1/judgeCode.out deleted file mode 100755 index 139692d..0000000 Binary files a/experiment/simulation/exp6/Problem1/judgeCode.out and /dev/null differ diff --git a/experiment/simulation/exp6/Problem1/temp.out b/experiment/simulation/exp6/Problem1/temp.out deleted file mode 100755 index 8351c19..0000000 --- a/experiment/simulation/exp6/Problem1/temp.out +++ /dev/null @@ -1 +0,0 @@ -14 diff --git a/experiment/simulation/exp6/Problem2/a.out b/experiment/simulation/exp6/Problem2/a.out deleted file mode 100755 index f27d552..0000000 Binary files a/experiment/simulation/exp6/Problem2/a.out and /dev/null differ diff --git a/experiment/simulation/exp6/Problem2/genInput.cpp b/experiment/simulation/exp6/Problem2/genInput.cpp deleted file mode 100755 index 328193e..0000000 --- a/experiment/simulation/exp6/Problem2/genInput.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; -typedef vector vi; -typedef vector vb; -typedef vector vd; -typedef vector vvi; -typedef vector vvb; -typedef vector vvd; -typedef vector vs; -typedef vector vvs; -typedef pair ii; -typedef pair pii; -typedef long long LL; -#define sz(c) (int)c.size() -#define pb push_back -#define all(v) v.begin(),v.end() -#define inc(i,n) for(int i=0;i=0;i--) -#define FOR(i,a,n) for(int i=a;i -int isPossible(int N,int D,int *weight){ - /* - if D is 0 we dont keep any weights on any side - and achive it. Hence we return 1 indicating that - a solution is possible. - */ - if(!D) - return 1; - /* - if N has become 0 we have exhausted all weights but could not - achieve the weight D . Hence we return 0 indicating no solution. - */ - if(!N) return 0; - - /* - With weight[N-1] we have 3 possibilites - 1.Add the weight on left side in which case we need to achieve D+weight[N-1] - 2.Add the weight on right side in which case we need to achieve D-weight[N-1] - 3.Dont add this weight on any side so we need to achive a weight of D. - */ - return isPossible(N-1,D+weight[N-1],weight)||isPossible(N-1,D-weight[N-1],weight)||isPossible(N-1,D,weight); -} -main(){ - //Assume weight D is on left side and we are adding other weights on any side. - int N,D; - scanf("%d",&N); - int weight[N],i; - - //scanning weights - for(i=0;i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; -typedef vector vi; -typedef vector vb; -typedef vector vd; -typedef vector vvi; -typedef vector vvb; -typedef vector vvd; -typedef vector vs; -typedef vector vvs; -typedef pair ii; -typedef pair pii; -typedef long long LL; -#define sz(c) (int)c.size() -#define pb push_back -#define all(v) v.begin(),v.end() -#define inc(i,n) for(int i=0;i=0;i--) -#define FOR(i,a,n) for(int i=a;i>s1>>s2; - int index1=0,index2=0; - for(;index1!=sz(s1) && index2!=sz(s2);index1++){ - if(s1[index1]==s2[index2]) - index2++; - } - if(index2==sz(s2)) - printf("YES\n"); - else - printf("NO\n"); - return 0; -} diff --git a/experiment/simulation/exp6/Problem2/temp.out b/experiment/simulation/exp6/Problem2/temp.out deleted file mode 100755 index f033a50..0000000 --- a/experiment/simulation/exp6/Problem2/temp.out +++ /dev/null @@ -1 +0,0 @@ -YES diff --git a/experiment/simulation/exp6/Procedure.html b/experiment/simulation/exp6/Procedure.html deleted file mode 100644 index 71f0f0e..0000000 --- a/experiment/simulation/exp6/Procedure.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
-
-
- - - -
- -

Computer Science & EngineeringProblem Solving Lab →List Of Experiments

- -
- - -
- - -

Recursion

-

- Procedure for the experiment is as follows. -

    -
  1. Write the code for the problem or upload a solution.
  2. -
  3. Press the i button get info about the problem which you have to solve.
  4. -
  5. If you are finding it difficult to solve the solution, then you can use the 4 levels of incresingly descriptive hints, but try to use minimum number of hints.
  6. -
  7. Compile the code by pressing the compile button.
  8. -
  9. If code is not compling then correct the error and/or warnings.
  10. -
  11. To execute the code and see output, press the execute button.
  12. -
-

-
-
-
- - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Quiz.html b/experiment/simulation/exp6/Quiz.html deleted file mode 100644 index 73a28c7..0000000 --- a/experiment/simulation/exp6/Quiz.html +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
-
-
- - - -
- -

Computer Science & EngineeringProblem Solving Lab →List Of Experiments

- -
- - - - - - - -
- - -

Recursion

-

- - - - -

- - - -
-1. The execution of a loop typically starts with:
-
-a) initialization statements
-b) Loop body
-c) test condition
-d) update statements
-
- -
- -
-2) The break statement is used to exit from:
-
-a) an if statement
-b) a for loop
-c) a program
-d) the main( ) function
-
- -
- -
-3) A do-while loop is useful when we want that the statements within the loop must be executed
-
-a) only once
-b) At Least Once
-c) More than once
-d) None of the above
-
- -
- -
-4) In what sequence the initialization, testing and execution of body is done in a do-while loop
-
-a) Initialization, execution of body, testing
-b) Execution of body, initialization, testing
-c) Initialization, testing, execution of body
-d) None of the above
-
- -
- -
-5) Which looping process checks the test condition at the end of the loop?
-
-a) for
-b) while
-c) do-while
-d) No looping peocess check condition at the end
-
- -
- -
-6) A continue statement causes execution to skip to:
-
-a) the end of the program
-b) the first statement after the loop
-c) the statement following the continue statement
-d) the next iteration of the loop
-
- -
- -
-7) The statement i++; is equivalent to:
-
-a) i = i + i;
-b) i = i + 1;
-c) i = i - 1;
-d) i - - ;
-
- -
- -
-8) Another word for "looping" is:
-
-a) recapitulation
-b) tintinabulation
-c) iteration
-d) reiteration
-
- -
- -
-9) Which looping process is best used when the number of iterations is known?
-
-a) for
-b) while
-c) do-while
-d) all of the above
-
- -
- -
-10) Which of the following is not an infinite loop.
-
-a) int i = 1 ; while ( 1 ) { i++ ; -}
-b) for( int i =1; i < 10 ; i--) printf("Hello World");
-c) for(int i =1; i<100; i++) printf("Hello World");
-d) int i = 0; do{ i-- printf("%d ",i); }while(i>0);
- -
- -
- -
-
-
-
- -

-
-
-
- - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/Theory.html b/experiment/simulation/exp6/Theory.html deleted file mode 100644 index 219bc69..0000000 --- a/experiment/simulation/exp6/Theory.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - Welcome to Virtual Labs - A MHRD Govt of india Initiative - - - - - - - - - - - - - - - - - - -
-
- - -
- -
-
-
-
-
-
- - - -
- -

Computer Science & EngineeringProblem Solving Lab →List Of Experiments

- -
- - -
- - -

Recursion

-

Problem 1

-

-Recursion can be applied to a problem if the problem for the given input can be expressed as dependent upon the solution of the same problem for simpler inputs. One has to hardcode the solution for some simple cases, so that this recursion does not go on endlessly. Now, the given problem of expressing a weight(W) as a sum of other weights can be expressed as the problem of choosing one weight(w) such that it is not greater than W and then solving the same problem for the remaining weight W-w. For this particular problem, the solution can be expressed easily by choosing all the possible multiples(m) of a given unit, 2^(i), iteratively for all the values of m for which m*2^(i) is less than W, and subsequently solving the same problem for the remaining weight, W-w, and for multiples of weights for higher order. So, our recursion function would be needing 2 variable, one signifying multiples of which order of weight should be used this time and other signifying remaining weight to be accrued. -

-

-
-

Problem 2

-

-Let us assume we have kept weight D on left pan. From amongst the N weights you can choose to keep some weights on left side and some weights on right side and we may not use some weights at all. Lets say we keep a total weight of w1 on left side and w2+D on right pan, then for balancing w1=w2+D.We keep track the difference between the two pans and if at any stage the difference of weights between two pans is 0 we report yes. Consider the ith weight and suppose the current difference between left pan and right pan is x. If x is 0 then yes we donot choose any weight and thus return 1. -

-

-Otherwise we have three options -

-
-

-Option1: - -Put the ith weight on right pan.In which case the difference between left and right pan becomes x - weight[i]. -
-Option2: -Put the ith weight on left pan.In which case the difference between left and right pan becomes x + weight[i]. -
-Option3: -Donot put the ith weight on either pan.In which case the difference between left and right pan remains x. -

-

-
-This gives the following Recursive Function : -

-

-Let F(i,x) denotes whether it is possible to obtain a difference of x using the weights
-w[i],w[i+1],...,w[n-1].
-Obviously, F(i,0) is 1, Otherwise
-F(i,x) = F(i+1,x)||F(i+1,x-w[i])||F(i+1,x+w[i]);
- -F(i+1,x) corresponds to Option3.
-F(i+1,x-w[i]) corresponds to Option1.
-F(i+1,x+w[i]) corresponds to Option2.
-






-

-

-
-
- - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - diff --git a/experiment/simulation/exp6/a.out b/experiment/simulation/exp6/a.out deleted file mode 100755 index 414eae6..0000000 Binary files a/experiment/simulation/exp6/a.out and /dev/null differ diff --git a/experiment/simulation/exp6/backend.php b/experiment/simulation/exp6/backend.php deleted file mode 100755 index ceda128..0000000 --- a/experiment/simulation/exp6/backend.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/experiment/simulation/exp6/content1.html b/experiment/simulation/exp6/content1.html deleted file mode 100755 index 66adb68..0000000 --- a/experiment/simulation/exp6/content1.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - EditArea - the code editor in a textarea - - - - - - - - - - -
-
- -
-
-
- diff --git a/experiment/simulation/exp6/content1_1.html b/experiment/simulation/exp6/content1_1.html deleted file mode 100755 index 28c05bc..0000000 --- a/experiment/simulation/exp6/content1_1.html +++ /dev/null @@ -1,4 +0,0 @@ -
-
- -
-Language                              ProblemNo - -
- diff --git a/experiment/simulation/exp6/content1_3.html b/experiment/simulation/exp6/content1_3.html deleted file mode 100755 index b348b26..0000000 --- a/experiment/simulation/exp6/content1_3.html +++ /dev/null @@ -1,3 +0,0 @@ -                    -     - diff --git a/experiment/simulation/exp6/content2.html b/experiment/simulation/exp6/content2.html deleted file mode 100755 index 7f40fdd..0000000 --- a/experiment/simulation/exp6/content2.html +++ /dev/null @@ -1,9 +0,0 @@ - - -               - -       - - - - diff --git a/experiment/simulation/exp6/content2_1.html b/experiment/simulation/exp6/content2_1.html deleted file mode 100755 index cd66935..0000000 --- a/experiment/simulation/exp6/content2_1.html +++ /dev/null @@ -1,5 +0,0 @@ -
-
-

HINTS


-
- diff --git a/experiment/simulation/exp6/content3.html b/experiment/simulation/exp6/content3.html deleted file mode 100755 index 020f8fb..0000000 --- a/experiment/simulation/exp6/content3.html +++ /dev/null @@ -1,11 +0,0 @@ -
- - - Highest Level Hint used: - diff --git a/experiment/simulation/exp6/content3_1.html b/experiment/simulation/exp6/content3_1.html deleted file mode 100755 index a3039c7..0000000 --- a/experiment/simulation/exp6/content3_1.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - -
- -
-
- - - - - - - - diff --git a/experiment/simulation/exp6/content4.html b/experiment/simulation/exp6/content4.html deleted file mode 100755 index 72771ea..0000000 --- a/experiment/simulation/exp6/content4.html +++ /dev/null @@ -1,4 +0,0 @@ -                     -     - - diff --git a/experiment/simulation/exp6/content5.html b/experiment/simulation/exp6/content5.html deleted file mode 100755 index ce3fead..0000000 --- a/experiment/simulation/exp6/content5.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -               - -               - -       - - -
-

HINTS

-
-
- - - -
- - - - - - - - - - - diff --git a/experiment/simulation/exp6/content5_1.html b/experiment/simulation/exp6/content5_1.html deleted file mode 100755 index 6fda2ca..0000000 --- a/experiment/simulation/exp6/content5_1.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - -               - -               - -       - - diff --git a/experiment/simulation/exp6/content5_2.html b/experiment/simulation/exp6/content5_2.html deleted file mode 100755 index 8cb2e3d..0000000 --- a/experiment/simulation/exp6/content5_2.html +++ /dev/null @@ -1,7 +0,0 @@ - -
-

HINTS

-
- - - diff --git a/experiment/simulation/exp6/content5_3.html b/experiment/simulation/exp6/content5_3.html deleted file mode 100755 index 60732c8..0000000 --- a/experiment/simulation/exp6/content5_3.html +++ /dev/null @@ -1,18 +0,0 @@ -
- - - -
- - - - - - - - - - - diff --git a/experiment/simulation/exp6/current.out b/experiment/simulation/exp6/current.out deleted file mode 100755 index df58008..0000000 Binary files a/experiment/simulation/exp6/current.out and /dev/null differ diff --git a/experiment/simulation/exp6/currentCode.c b/experiment/simulation/exp6/currentCode.c deleted file mode 100755 index 0f6618f..0000000 --- a/experiment/simulation/exp6/currentCode.c +++ /dev/null @@ -1,22 +0,0 @@ - #include - -int isPossible(int N,int D,int *weight){ - if(!N) - return !D; - return isPossible(N-1,D+weight[N-1],weight)||isPossible(N-1,D-weight[N-1],weight)||isPossible(N-1,D,weight); -} - -main(){ - int N; - scanf("%d",&N); - int weights[N],i,D; - for(i=0;i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; -typedef vector vi; -typedef vector vb; -typedef vector vd; -typedef vector vvi; -typedef vector vvb; -typedef vector vvd; -typedef vector vs; -typedef vector vvs; -typedef pair ii; -typedef pair pii; -typedef long long LL; -#define sz(c) (int)c.size() -#define pb push_back -#define all(v) v.begin(),v.end() -#define inc(i,n) for(int i=0;i=0;i--) -#define FOR(i,a,n) for(int i=a;i>s1>>s2; - int index1=0,index2=0; - for(;index1!=sz(s1) && index2!=sz(s2);index1++){ - if(s1[index1]==s2[index2]) - index2++; - } - if(index2==sz(s2)) - printf("YES\n"); - else - printf("NO\n"); - return 0; -} -[root@localhost Exp5]# cd ../ -[root@localhost HonoursProject-2]# cd Exp6 -[root@localhost Exp6]# cat Problem1/judgeCode.c -#include -int N; - -/*the variable index denotes that I have weights - 2^index , 2^(index+1), 2^(index+2),...,2^(N-1) - and W denotes the weight we need to achieve. -*/ -int no_ways(int W,int index){ - - /*If need to achieve W=0 we simply dont choose any weights - and it is a solution.. so we return 1. - */ - - /* - if index==N we could not achieve the weight W and so we return 0 - - */ - if(!W) - return 1; - if(index==N) - return 0; - - int i,ans=0; - /* - The variable i indicates that I have choosen - i weights of 2^index - If I choose i weights of 2^index the - weight we need to achieve becomes W-i*(2^index) - */ - for(i=0;i*(1<=0 , x2>=0,...xN>=0. - Hint3: - We reformulate the task in a slightly different - way. How many ways can we achieve a weight W - given that we can choose any weights from - 2^i,2^(i+1),..2^(N-1). Suppose we choose x(i) - number of weights of type 2^i we would need to - achieve a weight of W-x(i)*2^i from 2^(i+1),2^(i+2), - ...,2^(N-1) which leads us to the simple recursive - equation no_ways[W][i] = sigma(no_ways[W-x*2^i][i+1]) - , x varies from 0 to W/2^i - -*/ - \ No newline at end of file diff --git a/experiment/simulation/exp6/default.css b/experiment/simulation/exp6/default.css deleted file mode 100755 index 49c60ec..0000000 --- a/experiment/simulation/exp6/default.css +++ /dev/null @@ -1,224 +0,0 @@ -dl,li,dt,dd,h4,h5,h6,pre,form,body,html,p,blockquote,fieldset,input, div, h1,h2,h3,p,ul,ol,img,header{ - margin:0; padding:0; list-style:none; -} - -a { - text-decoration: none; /* no underlines */ - color: #961b25;/* dusty read */ -} - -a:hover { - color:#6f92a7; /*dusty blue */ -} - -:focus { - outline:0; /* no outline on focus */ -} - -h1,h2,h3 { - font-family: Georgia, Palatino, Palatino Linotype, Times, Times New Roman, serif; /* web safe colors */ - font-weight: normal; -} - -article { - margin:0; - padding:0; - position:relative; - display:block; -} - -h4,h5,h6,pre,code,p { - font-size: 1em; -} - -header#site_head { - - background: url(images/bck_head.jpg); - - /* create a shadow of dark pinkish red */ - - x-shadow: inset 0px -2px 3px #480508; - -khtml-box-shadow: inset 0px -2px 3px #480508; - -webkit-box-shadow: inset 0px -2px 3px #480508; - box-shadow: inset 0px -2px 3px #480508; - - /* solid border of greyish white */ - - border-bottom: 1px solid #fffffb; - height: 40px; - width: 100%; - display: block; -} -/* header of 960px width */ - - -#logo - { - float:left; - position:relative; - } -#help-menu - { - float:right; - position:relative; - } - -#logo a:link, #logo a:visited - { - color:#FFF; - text-decoration: none; - float: left; - font-size: 24px; - font-weight:bold; - text-transform:uppercase; - padding: 5px 25px; - width:300px; - } -#help-menu a:link, #help-menu a:visited - { - color:#FFF; - text-decoration: none; - float: right; - font-size: 24px; - text-transform:uppercase; - padding: 5px 25px; - width:200px; - } - -#logo a:hover, #logo a:focus, #help-menu a:hover, #help-menu a:focus - { - color: #CC3300; - /*background-color:#cc3300;*/ - } - -nav - { - float:left; - height:38px; - position:relative; - width:100%; - border-top: 1px solid #3d414c; - border-bottom: 1px solid #3d414c; - } -nav ul - { - margin-left:21px; - } - -nav ul li - { - float: left; - list-style: none; - margin-right: 0.5em; - } - -nav li a:link, nav li a:visited - { - color: #961b25; - text-decoration: underline; - float: right; - font-size: 16px; - text-transform:uppercase; - padding: 9px; - } - -nav li a:hover, nav li a:focus - { - color: #ffffff; - background-color:#961b25; - } - -nav li a.menu-active - { - color: #ffffff; - background-color:#961b25; - } - -/* main-title : h1 tag 50px, Georgia, with border around */ -header#main-title - { - font-size: 24px; - font-family: Georgia, "Times New Roman", Times, Serif; - font-weight: normal; - text-transform: none; - margin: 0 20px 2px; - line-height: 60px; - color: #3d414c; - padding: 10px 0; - letter-spacing: 0; - } - -bbody { - font-family:"Lucida Grande","Lucida Sans Unicode","Lucida Sans",Verdana,Arial,sans-serif; - font-size:12px; - margin:0; - padding:0; - background: #f6f6ee url(images/bck.jpg); - } - -#header { - border-bottom:#AAA 2px solid; - padding:0px 10px 5px 15px; -} -#header h1 { - font-size:3em; - /*color:#FFF; - background:#333;*/ - padding:0px 10px 0px 10px; - font-family:lucida console; - font-weight:bold; - display:inline; -} -#header h2 { - padding:0px 0px 0px 5px; - color:#333; - font-family:Arial,Helvetica,sans serif; - display:inline; -} -#header img { - float:left; - height:64px; -} - -#footer { - clear:left; - border-top:solid 3px #480508; - text-align:center; - font-size:.90em; - padding:20px 0px 0px 0px; - color:##480508; - font-weight:600; -} -#footer a { - color:##480508; - text-decoration:none; - font-style:italic; -} -#footer a:hover { - text-decoration:underline; -} -#content{ - margin:auto; - width:1124px; -} -#contentLeft{ - float:left; - width:700px; -} -#contentRight{ - float:left; - width:400px; - margin-left:24px; - text-align:center; - color:#3d414c; -} -#hintBox{ - width:400px; - padding:5px; - height:400px; - background: #cccccc; - border-radius: 10px; - text-align:left; - overflow:auto; - -} diff --git a/experiment/simulation/exp6/default.html b/experiment/simulation/exp6/default.html deleted file mode 100644 index dbd32aa..0000000 --- a/experiment/simulation/exp6/default.html +++ /dev/null @@ -1,408 +0,0 @@ - - - -
- - - -
- - - - - - - -
- - - -
- - - -
- - Simple Pendulum - -
- - - - - -
- - -
- -
- - -
- - -
- Introduction -
- - -
-

- In this module, basic concepts of simple oscillator - are explained. Initially, an example of simple - pendulum is taken and the basic terminology i.e., - what is initial displacement, - initial velocity,natural frequency - and time period are explained. - Each of these terms is illustrated by giving an - example, where user can enter his value and observe - the behavior of structure for his input. -

- -

- Simple harmonic oscillator consists of a - mass (m) hanging from a string of - length (l), fixed at a pivot point P. - When the mass is displaced from its mean - position by giving some initial displacement - (angle), oscillator starts swinging back and fourth - with periodic motion. -

- - pendulum -
- - -
- - -
- -
- - -
- - -
- Theory -
- - - -
-

- There are two solutions to \(ax^2 + bx + c = 0\) and - they are $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ - By applying Newton's second law for - rotational systems, the equation of motion for the - pendulum may be obtained. -

- -

- Where, �„ = Torque ; I = - Moment of Inertia; α = - Angular Velocity. m is mass of the - oscillator, l is the length of the oscillator and theta is initial - displacement. The above equation can be rearranged as -

- -

- If the amplitude of - angular displacement is - small then we can use the approximation - (sinθ ≈ θ). - By considering the above approximation, the equation - of motion reduces to : -

- -

- The solution for equation of simple harmonic oscillator is -

- -

- where, θ(t) is the history of oscillation, - θ0 is the initial angle, - &omega=(g/l)1/2 is the - natural frequency of - the motion. -

-
-
- - -
- -
- - -
- -
- Objective -
- -
-

- Objective of simple harmonic oscillator experiment - is to understand the concept of time period - (natural frequency) in harmonic - oscillations . -

- -
- -
- - -
- -
- - -
- -
- Experiment -
- -
-

- -

-
- -
- -
- -
- - -
- -
- Manual -
- -
-

- Start the experiment with the default values of - length, mass and intial displacement (in angle). - Pause the experiment after few cycles and note - the observation. -

- -

Observation 1:

-
    - -
  1. - Find the time period of the pendulum by noting the - time interval of any one complete cycle from the - response graph. -
  2. - -
  3. - You may note that this time period value is same - for any complete cycle. - Read More -
  4. - -
- -
- -
- -
- -
- - -
- -
- Quizzes -
- -
- -

- - Q1. - Time taken for one complete oscillation - is called Time Period of the oscillator.
- - True
- - False

- - Q2. - Time period of the oscillator is constant for - given values of mass, length and initial - conditions.
- - True
- - False

- - Q3. - Value of Time period depends on initial - conditions.
- - True
- - False

- - Q4. - Value of time period depends on mass.
- - True
- - False

- - Q5. - Value of time period depends on length of the - oscillator.
- - True
- - False

- -

- -
- -
- -
- -
- - -
- -
- Procedure -
- -
-

- Procedure for the experiment is as follows -

-
- -
- - -
- -
- - -
- -
- Further Readings -
- -
- -
- -
- -
- - - - - - - -
- -
- -
- - - -
- -
- -
- - - - \ No newline at end of file diff --git a/experiment/simulation/exp6/edit_area/autocompletion.js b/experiment/simulation/exp6/edit_area/autocompletion.js deleted file mode 100755 index c5d646a..0000000 --- a/experiment/simulation/exp6/edit_area/autocompletion.js +++ /dev/null @@ -1,491 +0,0 @@ -/** - * Autocompletion class - * - * An auto completion box appear while you're writing. It's possible to force it to appear with Ctrl+Space short cut - * - * Loaded as a plugin inside editArea (everything made here could have been made in the plugin directory) - * But is definitly linked to syntax selection (no need to do 2 different files for color and auto complete for each syntax language) - * and add a too important feature that many people would miss if included as a plugin - * - * - init param: autocompletion_start - * - Button name: "autocompletion" - */ - -var EditArea_autocompletion= { - - /** - * Get called once this file is loaded (editArea still not initialized) - * - * @return nothing - */ - init: function(){ - // alert("test init: "+ this._someInternalFunction(2, 3)); - - if(editArea.settings["autocompletion"]) - this.enabled= true; - else - this.enabled= false; - this.current_word = false; - this.shown = false; - this.selectIndex = -1; - this.forceDisplay = false; - this.isInMiddleWord = false; - this.autoSelectIfOneResult = false; - this.delayBeforeDisplay = 100; - this.checkDelayTimer = false; - this.curr_syntax_str = ''; - - this.file_syntax_datas = {}; - } - /** - * Returns the HTML code for a specific control string or false if this plugin doesn't have that control. - * A control can be a button, select list or any other HTML item to present in the EditArea user interface. - * Language variables such as {$lang_somekey} will also be replaced with contents from - * the language packs. - * - * @param {string} ctrl_name: the name of the control to add - * @return HTML code for a specific control or false. - * @type string or boolean - */ - /*,get_control_html: function(ctrl_name){ - switch( ctrl_name ){ - case 'autocompletion': - // Control id, button img, command - return parent.editAreaLoader.get_button_html('autocompletion_but', 'autocompletion.gif', 'toggle_autocompletion', false, this.baseURL); - break; - } - return false; - }*/ - /** - * Get called once EditArea is fully loaded and initialised - * - * @return nothing - */ - ,onload: function(){ - if(this.enabled) - { - var icon= document.getElementById("autocompletion"); - if(icon) - editArea.switchClassSticky(icon, 'editAreaButtonSelected', true); - } - - this.container = document.createElement('div'); - this.container.id = "auto_completion_area"; - editArea.container.insertBefore( this.container, editArea.container.firstChild ); - - // add event detection for hiding suggestion box - parent.editAreaLoader.add_event( document, "click", function(){ editArea.plugins['autocompletion']._hide();} ); - parent.editAreaLoader.add_event( editArea.textarea, "blur", function(){ editArea.plugins['autocompletion']._hide();} ); - - } - - /** - * Is called each time the user touch a keyboard key. - * - * @param (event) e: the keydown event - * @return true - pass to next handler in chain, false - stop chain execution - * @type boolean - */ - ,onkeydown: function(e){ - if(!this.enabled) - return true; - - if (EA_keys[e.keyCode]) - letter=EA_keys[e.keyCode]; - else - letter=String.fromCharCode(e.keyCode); - // shown - if( this._isShown() ) - { - // if escape, hide the box - if(letter=="Esc") - { - this._hide(); - return false; - } - // Enter - else if( letter=="Entrer") - { - var as = this.container.getElementsByTagName('A'); - // select a suggested entry - if( this.selectIndex >= 0 && this.selectIndex < as.length ) - { - as[ this.selectIndex ].onmousedown(); - return false - } - // simply add an enter in the code - else - { - this._hide(); - return true; - } - } - else if( letter=="Tab" || letter=="Down") - { - this._selectNext(); - return false; - } - else if( letter=="Up") - { - this._selectBefore(); - return false; - } - } - // hidden - else - { - - } - - // show current suggestion list and do autoSelect if possible (no matter it's shown or hidden) - if( letter=="Space" && CtrlPressed(e) ) - { - //parent.console.log('SHOW SUGGEST'); - this.forceDisplay = true; - this.autoSelectIfOneResult = true; - this._checkLetter(); - return false; - } - - // wait a short period for check that the cursor isn't moving - setTimeout("editArea.plugins['autocompletion']._checkDelayAndCursorBeforeDisplay();", editArea.check_line_selection_timer +5 ); - this.checkDelayTimer = false; - return true; - } - /** - * Executes a specific command, this function handles plugin commands. - * - * @param {string} cmd: the name of the command being executed - * @param {unknown} param: the parameter of the command - * @return true - pass to next handler in chain, false - stop chain execution - * @type boolean - */ - ,execCommand: function(cmd, param){ - switch( cmd ){ - case 'toggle_autocompletion': - var icon= document.getElementById("autocompletion"); - if(!this.enabled) - { - if(icon != null){ - editArea.restoreClass(icon); - editArea.switchClassSticky(icon, 'editAreaButtonSelected', true); - } - this.enabled= true; - } - else - { - this.enabled= false; - if(icon != null) - editArea.switchClassSticky(icon, 'editAreaButtonNormal', false); - } - return true; - } - return true; - } - ,_checkDelayAndCursorBeforeDisplay: function() - { - this.checkDelayTimer = setTimeout("if(editArea.textarea.selectionStart == "+ editArea.textarea.selectionStart +") EditArea_autocompletion._checkLetter();", this.delayBeforeDisplay - editArea.check_line_selection_timer - 5 ); - } - // hide the suggested box - ,_hide: function(){ - this.container.style.display="none"; - this.selectIndex = -1; - this.shown = false; - this.forceDisplay = false; - this.autoSelectIfOneResult = false; - } - // display the suggested box - ,_show: function(){ - if( !this._isShown() ) - { - this.container.style.display="block"; - this.selectIndex = -1; - this.shown = true; - } - } - // is the suggested box displayed? - ,_isShown: function(){ - return this.shown; - } - // setter and getter - ,_isInMiddleWord: function( new_value ){ - if( typeof( new_value ) == "undefined" ) - return this.isInMiddleWord; - else - this.isInMiddleWord = new_value; - } - // select the next element in the suggested box - ,_selectNext: function() - { - var as = this.container.getElementsByTagName('A'); - - // clean existing elements - for( var i=0; i= as.length || this.selectIndex < 0 ) ? 0 : this.selectIndex; - as[ this.selectIndex ].className += " focus"; - } - // select the previous element in the suggested box - ,_selectBefore: function() - { - var as = this.container.getElementsByTagName('A'); - - // clean existing elements - for( var i=0; i= as.length || this.selectIndex < 0 ) ? as.length-1 : this.selectIndex; - as[ this.selectIndex ].className += " focus"; - } - ,_select: function( content ) - { - cursor_forced_position = content.indexOf( '{@}' ); - content = content.replace(/{@}/g, '' ); - editArea.getIESelection(); - - // retrive the number of matching characters - var start_index = Math.max( 0, editArea.textarea.selectionEnd - content.length ); - - line_string = editArea.textarea.value.substring( start_index, editArea.textarea.selectionEnd + 1); - limit = line_string.length -1; - nbMatch = 0; - for( i =0; i 0 ) - parent.editAreaLoader.setSelectionRange(editArea.id, editArea.textarea.selectionStart - nbMatch , editArea.textarea.selectionEnd); - - parent.editAreaLoader.setSelectedText(editArea.id, content ); - range= parent.editAreaLoader.getSelectionRange(editArea.id); - - if( cursor_forced_position != -1 ) - new_pos = range["end"] - ( content.length-cursor_forced_position ); - else - new_pos = range["end"]; - parent.editAreaLoader.setSelectionRange(editArea.id, new_pos, new_pos); - this._hide(); - } - - - /** - * Parse the AUTO_COMPLETION part of syntax definition files - */ - ,_parseSyntaxAutoCompletionDatas: function(){ - //foreach syntax loaded - for(var lang in parent.editAreaLoader.load_syntax) - { - if(!parent.editAreaLoader.syntax[lang]['autocompletion']) // init the regexp if not already initialized - { - parent.editAreaLoader.syntax[lang]['autocompletion']= {}; - // the file has auto completion datas - if(parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION']) - { - // parse them - for(var i in parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION']) - { - datas = parent.editAreaLoader.load_syntax[lang]['AUTO_COMPLETION'][i]; - tmp = {}; - if(datas["CASE_SENSITIVE"]!="undefined" && datas["CASE_SENSITIVE"]==false) - tmp["modifiers"]="i"; - else - tmp["modifiers"]=""; - tmp["prefix_separator"]= datas["REGEXP"]["prefix_separator"]; - tmp["match_prefix_separator"]= new RegExp( datas["REGEXP"]["prefix_separator"] +"$", tmp["modifiers"]); - tmp["match_word"]= new RegExp("(?:"+ datas["REGEXP"]["before_word"] +")("+ datas["REGEXP"]["possible_words_letters"] +")$", tmp["modifiers"]); - tmp["match_next_letter"]= new RegExp("^("+ datas["REGEXP"]["letter_after_word_must_match"] +")$", tmp["modifiers"]); - tmp["keywords"]= {}; - //console.log( datas["KEYWORDS"] ); - for( var prefix in datas["KEYWORDS"] ) - { - tmp["keywords"][prefix]= { - prefix: prefix, - prefix_name: prefix, - prefix_reg: new RegExp("(?:"+ parent.editAreaLoader.get_escaped_regexp( prefix ) +")(?:"+ tmp["prefix_separator"] +")$", tmp["modifiers"] ), - datas: [] - }; - for( var j=0; j it's valid - if( !match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length == 0 ) - { - if( ! before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) ) - hasMatch = true; - } - // we still need to check the prefix if there is one - else if( this.curr_syntax[i]["keywords"][prefix]['prefix'].length > 0 ) - { - if( before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) ) - hasMatch = true; - } - - if( hasMatch ) - results[results.length]= [ this.curr_syntax[i]["keywords"][prefix], this.curr_syntax[i]["keywords"][prefix]['datas'][j] ]; - } - } - } - } - // it doesn't match any possible word but we want to display something - // we'll display to list of all available words - else if( this.forceDisplay || match_prefix_separator ) - { - for(var prefix in this.curr_syntax[i]["keywords"]) - { - for(var j=0; j it's valid - if( !match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length == 0 ) - { - hasMatch = true; - } - // we still need to check the prefix if there is one - else if( match_prefix_separator && this.curr_syntax[i]["keywords"][prefix]['prefix'].length > 0 ) - { - var before = last_chars; //.substr( 0, last_chars.length ); - if( before.match( this.curr_syntax[i]["keywords"][prefix]['prefix_reg'] ) ) - hasMatch = true; - } - - if( hasMatch ) - results[results.length]= [ this.curr_syntax[i]["keywords"][prefix], this.curr_syntax[i]["keywords"][prefix]['datas'][j] ]; - } - } - } - } - } - - // there is only one result, and we can select it automatically - if( results.length == 1 && this.autoSelectIfOneResult ) - { - // console.log( results ); - this._select( results[0][1]['replace_with'] ); - } - else if( results.length == 0 ) - { - this._hide(); - } - else - { - // build the suggestion box content - var lines=[]; - for(var i=0; i"+ results[i][1]['comment']; - if(results[i][0]['prefix_name'].length>0) - line+=''+ results[i][0]['prefix_name'] +''; - line+=''; - lines[lines.length]=line; - } - // sort results - this.container.innerHTML = '
    '+ lines.sort().join('') +'
'; - - var cursor = _$("cursor_pos"); - this.container.style.top = ( cursor.cursor_top + editArea.lineHeight ) +"px"; - this.container.style.left = ( cursor.cursor_left + 8 ) +"px"; - this._show(); - } - - this.autoSelectIfOneResult = false; - time=new Date; - t2= time.getTime(); - - //parent.console.log( begin_word +"\n"+ (t2-t1) +"\n"+ html ); - } - } -}; - -// Load as a plugin -editArea.settings['plugins'][ editArea.settings['plugins'].length ] = 'autocompletion'; -editArea.add_plugin('autocompletion', EditArea_autocompletion); \ No newline at end of file diff --git a/experiment/simulation/exp6/edit_area/edit_area.css b/experiment/simulation/exp6/edit_area/edit_area.css deleted file mode 100755 index 172b366..0000000 --- a/experiment/simulation/exp6/edit_area/edit_area.css +++ /dev/null @@ -1,530 +0,0 @@ -body, html{ - margin: 0; - padding: 0; - height: 100%; - border: none; - overflow: hidden; - background-color: #FFF; -} - -body, html, table, form, textarea{ - font: 12px monospace, sans-serif; -} - -#editor{ - border: solid #888 1px; - overflow: hidden; -} - -#result{ - z-index: 4; - overflow-x: auto; - overflow-y: scroll; - border-top: solid #888 1px; - border-bottom: solid #888 1px; - position: relative; - clear: both; -} - -#result.empty{ - overflow: hidden; -} - -#container{ - overflow: hidden; - border: solid blue 0; - position: relative; - z-index: 10; - padding: 0 5px 0 45px; - /*padding-right: 5px;*/ -} - -#textarea{ - position: relative; - top: 0; - left: 0; - margin: 0; - padding: 0; - width: 100%; - height: 100%; - overflow: hidden; - z-index: 7; - border-width: 0; - background-color: transparent; - resize: none; -} - -#textarea, #textarea:hover{ - outline: none; /* safari outline fix */ -} - -#content_highlight{ - white-space: pre; - margin: 0; - padding: 0; - position : absolute; - z-index: 4; - overflow: visible; -} - - -#selection_field, #selection_field_text{ - margin: 0; - background-color: #E1F2F9; -/* height: 1px; */ - position: absolute; - z-index: 5; - top: -100px; - padding: 0; - white-space: pre; - overflow: hidden; -} - -#selection_field.show_colors { - z-index: 3; - background-color:#EDF9FC; - -} - -#selection_field strong{ - font-weight:normal; -} - -#selection_field.show_colors *, #selection_field_text * { - visibility: hidden; -} - -#selection_field_text{ - background-color:transparent; -} - -#selection_field_text strong{ - font-weight:normal; - background-color:#3399FE; - color: #FFF; - visibility:visible; -} - -#container.word_wrap #content_highlight, -#container.word_wrap #selection_field, -#container.word_wrap #selection_field_text, -#container.word_wrap #test_font_size{ - white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ - width: 99%; -} - -#line_number{ - position: absolute; - overflow: hidden; - border-right: solid black 1px; - z-index:8; - width: 38px; - padding: 0 5px 0 0; - margin: 0 0 0 -45px; - text-align: right; - color: #AAAAAA; -} - -#test_font_size{ - padding: 0; - margin: 0; - visibility: hidden; - position: absolute; - white-space: pre; -} - -pre{ - margin: 0; - padding: 0; -} - -.hidden{ - opacity: 0.2; - filter:alpha(opacity=20); -} - -#result .edit_area_cursor{ - position: absolute; - z-index:6; - background-color: #FF6633; - top: -100px; - margin: 0; -} - -#result .edit_area_selection_field .overline{ - background-color: #996600; -} - - -/* area popup */ -.editarea_popup{ - border: solid 1px #888888; - background-color: #ECE9D8; - width: 250px; - padding: 4px; - position: absolute; - visibility: hidden; - z-index: 15; - top: -500px; -} - -.editarea_popup, .editarea_popup table{ - font-family: sans-serif; - font-size: 10pt; -} - -.editarea_popup img{ - border: 0; -} - -.editarea_popup .close_popup{ - float: right; - line-height: 16px; - border: 0; - padding: 0; -} - -.editarea_popup h1,.editarea_popup h2,.editarea_popup h3,.editarea_popup h4,.editarea_popup h5,.editarea_popup h6{ - margin: 0; - padding: 0; -} - -.editarea_popup .copyright{ - text-align: right; -} - -/* Area_search */ -div#area_search_replace{ - /*width: 250px;*/ -} - -div#area_search_replace img{ - border: 0; -} - -div#area_search_replace div.button{ - text-align: center; - line-height: 1.7em; -} - -div#area_search_replace .button a{ - cursor: pointer; - border: solid 1px #888888; - background-color: #DEDEDE; - text-decoration: none; - padding: 0 2px; - color: #000000; - white-space: nowrap; -} - -div#area_search_replace a:hover{ - /*border: solid 1px #888888;*/ - background-color: #EDEDED; -} - -div#area_search_replace #move_area_search_replace{ - cursor: move; - border: solid 1px #888; -} - -div#area_search_replace #close_area_search_replace{ - text-align: right; - vertical-align: top; - white-space: nowrap; -} - -div#area_search_replace #area_search_msg{ - height: 18px; - overflow: hidden; - border-top: solid 1px #888; - margin-top: 3px; -} - -/* area help */ -#edit_area_help{ - width: 350px; -} - -#edit_area_help div.close_popup{ - float: right; -} - -/* area_toolbar */ -.area_toolbar{ - /*font: 11px sans-serif;*/ - width: 100%; - /*height: 21px; */ - margin: 0; - padding: 0; - background-color: #ECE9D8; - text-align: center; -} - -.area_toolbar, .area_toolbar table{ - font: 11px sans-serif; -} - -.area_toolbar img{ - border: 0; - vertical-align: middle; -} - -.area_toolbar input{ - margin: 0; - padding: 0; -} - -.area_toolbar select{ - font-family: 'MS Sans Serif',sans-serif,Verdana,Arial; - font-size: 7pt; - font-weight: normal; - margin: 2px 0 0 0 ; - padding: 0; - vertical-align: top; - background-color: #F0F0EE; -} - -table.statusbar{ - width: 100%; -} - -.area_toolbar td.infos{ - text-align: center; - width: 130px; - border-right: solid 1px #888; - border-width: 0 1px 0 0; - padding: 0; -} - -.area_toolbar td.total{ - text-align: right; - width: 50px; - padding: 0; -} - -.area_toolbar td.resize{ - text-align: right; -} -/* -.area_toolbar span{ - line-height: 1px; - padding: 0; - margin: 0; -}*/ - -.area_toolbar span#resize_area{ - cursor: nw-resize; - visibility: hidden; -} - -/* toolbar buttons */ -.editAreaButtonNormal, .editAreaButtonOver, .editAreaButtonDown, .editAreaSeparator, .editAreaSeparatorLine, .editAreaButtonDisabled, .editAreaButtonSelected { - border: 0; margin: 0; padding: 0; background: transparent; - margin-top: 0; - margin-left: 1px; - padding: 0; -} - -.editAreaButtonNormal { - border: 1px solid #ECE9D8 !important; - cursor: pointer; -} - -.editAreaButtonOver { - border: 1px solid #0A246A !important; - cursor: pointer; - background-color: #B6BDD2; -} - -.editAreaButtonDown { - cursor: pointer; - border: 1px solid #0A246A !important; - background-color: #8592B5; -} - -.editAreaButtonSelected { - border: 1px solid #C0C0BB !important; - cursor: pointer; - background-color: #F4F2E8; -} - -.editAreaButtonDisabled { - filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); - -moz-opacity:0.3; - opacity: 0.3; - border: 1px solid #F0F0EE !important; - cursor: pointer; -} - -.editAreaSeparatorLine { - margin: 1px 2px; - background-color: #C0C0BB; - width: 2px; - height: 18px; -} - -/* waiting screen */ -#processing{ - display: none; - background-color:#ECE9D8; - border: solid #888 1px; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 100; - text-align: center; -} - -#processing_text{ - position:absolute; - left: 50%; - top: 50%; - width: 200px; - height: 20px; - margin-left: -100px; - margin-top: -10px; - text-align: center; -} -/* end */ - - -/**** tab browsing area ****/ -#tab_browsing_area{ - display: none; - background-color: #CCC9A8; - border-top: 1px solid #888; - text-align: left; - margin: 0; -} - -#tab_browsing_list { - padding: 0; - margin: 0; - list-style-type: none; - white-space: nowrap; -} -#tab_browsing_list li { - float: left; - margin: -1px; -} -#tab_browsing_list a { - position: relative; - display: block; - text-decoration: none; - float: left; - cursor: pointer; - line-height:14px; -} - -#tab_browsing_list a span { - display: block; - color: #000; - background: #ECE9D8; - border: 1px solid #888; - border-width: 1px 1px 0; - text-align: center; - padding: 2px 2px 1px 4px; - position: relative; /*IE 6 hack */ -} - -#tab_browsing_list a b { - display: block; - border-bottom: 2px solid #617994; -} - -#tab_browsing_list a .edited { - display: none; -} - -#tab_browsing_list a.edited .edited { - display: inline; -} - -#tab_browsing_list a img{ - margin-left: 7px; -} - -#tab_browsing_list a.edited img{ - margin-left: 3px; -} - -#tab_browsing_list a:hover span { - background: #F4F2E8; - border-color: #0A246A; -} - -#tab_browsing_list .selected a span{ - background: #046380; - color: #FFF; -} - - -#no_file_selected{ - height: 100%; - width: 150%; /* Opera need more than 100% */ - background: #CCC; - display: none; - z-index: 20; - position: absolute; -} - - -/*** Non-editable mode ***/ -.non_editable #editor -{ - border-width: 0 1px; -} - -.non_editable .area_toolbar -{ - display: none; -} - -/*** Auto completion ***/ -#auto_completion_area -{ - background: #FFF; - border: solid 1px #888; - position: absolute; - z-index: 15; - width: 280px; - height: 180px; - overflow: auto; - display:none; -} - -#auto_completion_area a, #auto_completion_area a:visited -{ - display: block; - padding: 0 2px 1px; - color: #000; - text-decoration:none; -} - -#auto_completion_area a:hover, #auto_completion_area a:focus, #auto_completion_area a.focus -{ - background: #D6E1FE; - text-decoration:none; -} - -#auto_completion_area ul -{ - margin: 0; - padding: 0; - list-style: none inside; -} -#auto_completion_area li -{ - padding: 0; -} -#auto_completion_area .prefix -{ - font-style: italic; - padding: 0 3px; -} \ No newline at end of file diff --git a/experiment/simulation/exp6/edit_area/edit_area.js b/experiment/simulation/exp6/edit_area/edit_area.js deleted file mode 100755 index 32d2a98..0000000 --- a/experiment/simulation/exp6/edit_area/edit_area.js +++ /dev/null @@ -1,527 +0,0 @@ -/****** - * - * EditArea - * Developped by Christophe Dolivet - * Released under LGPL, Apache and BSD licenses (use the one you want) - * -******/ - - function EditArea(){ - var t=this; - t.error= false; // to know if load is interrrupt - - t.inlinePopup= [{popup_id: "area_search_replace", icon_id: "search"}, - {popup_id: "edit_area_help", icon_id: "help"}]; - t.plugins= {}; - - t.line_number=0; - - parent.editAreaLoader.set_browser_infos(t); // navigator identification - // fix IE8 detection as we run in IE7 emulate mode through X-UA tag - if( t.isIE >= 8 ) - t.isIE = 7; - - t.last_selection={}; - t.last_text_to_highlight=""; - t.last_hightlighted_text= ""; - t.syntax_list= []; - t.allready_used_syntax= {}; - t.check_line_selection_timer= 50; // the timer delay for modification and/or selection change detection - - t.textareaFocused= false; - t.highlight_selection_line= null; - t.previous= []; - t.next= []; - t.last_undo=""; - t.files= {}; - t.filesIdAssoc= {}; - t.curr_file= ''; - //t.loaded= false; - t.assocBracket={}; - t.revertAssocBracket= {}; - // bracket selection init - t.assocBracket["("]=")"; - t.assocBracket["{"]="}"; - t.assocBracket["["]="]"; - for(var index in t.assocBracket){ - t.revertAssocBracket[t.assocBracket[index]]=index; - } - t.is_editable= true; - - - /*t.textarea=""; - - t.state="declare"; - t.code = []; // store highlight syntax for languagues*/ - // font datas - t.lineHeight= 16; - /*t.default_font_family= "monospace"; - t.default_font_size= 10;*/ - t.tab_nb_char= 8; //nb of white spaces corresponding to a tabulation - if(t.isOpera) - t.tab_nb_char= 6; - - t.is_tabbing= false; - - t.fullscreen= {'isFull': false}; - - t.isResizing=false; // resize var - - // init with settings and ID (area_id is a global var defined by editAreaLoader on iframe creation - t.id= area_id; - t.settings= editAreas[t.id]["settings"]; - - if((""+t.settings['replace_tab_by_spaces']).match(/^[0-9]+$/)) - { - t.tab_nb_char= t.settings['replace_tab_by_spaces']; - t.tabulation=""; - for(var i=0; i0) - t.syntax_list= t.settings["syntax_selection_allow"].replace(/ /g,"").split(","); - - if(t.settings['syntax']) - t.allready_used_syntax[t.settings['syntax']]=true; - - - }; - EditArea.prototype.init= function(){ - var t=this, a, s=t.settings; - t.textarea = _$("textarea"); - t.container = _$("container"); - t.result = _$("result"); - t.content_highlight = _$("content_highlight"); - t.selection_field = _$("selection_field"); - t.selection_field_text= _$("selection_field_text"); - t.processing_screen = _$("processing"); - t.editor_area = _$("editor"); - t.tab_browsing_area = _$("tab_browsing_area"); - t.test_font_size = _$("test_font_size"); - a = t.textarea; - - if(!s['is_editable']) - t.set_editable(false); - - t.set_show_line_colors( s['show_line_colors'] ); - - if(syntax_selec= _$("syntax_selection")) - { - // set up syntax selection lsit in the toolbar - for(var i=0; i= '3' ) { - t.content_highlight.style.paddingLeft= "1px"; - t.selection_field.style.paddingLeft= "1px"; - t.selection_field_text.style.paddingLeft= "1px"; - } - - if(t.isIE && t.isIE < 8 ){ - a.style.marginTop= "-1px"; - } - /* - if(t.isOpera){ - t.editor_area.style.position= "absolute"; - }*/ - - if( t.isSafari ){ - t.editor_area.style.position = "absolute"; - a.style.marginLeft ="-3px"; - if( t.isSafari < 3.2 ) // Safari 3.0 (3.1?) - a.style.marginTop ="1px"; - } - - // si le textarea n'est pas grand, un click sous le textarea doit provoquer un focus sur le textarea - parent.editAreaLoader.add_event(t.result, "click", function(e){ if((e.target || e.srcElement)==editArea.result) { editArea.area_select(editArea.textarea.value.length, 0);} }); - - if(s['is_multi_files']!=false) - t.open_file({'id': t.curr_file, 'text': ''}); - - t.set_word_wrap( s['word_wrap'] ); - - setTimeout("editArea.focus();editArea.manage_size();editArea.execCommand('EA_load');", 10); - //start checkup routine - t.check_undo(); - t.check_line_selection(true); - t.scroll_to_view(); - - for(var i in t.plugins){ - if(typeof(t.plugins[i].onload)=="function") - t.plugins[i].onload(); - } - if(s['fullscreen']==true) - t.toggle_full_screen(true); - - parent.editAreaLoader.add_event(window, "resize", editArea.update_size); - parent.editAreaLoader.add_event(parent.window, "resize", editArea.update_size); - parent.editAreaLoader.add_event(top.window, "resize", editArea.update_size); - parent.editAreaLoader.add_event(window, "unload", function(){ - // in case where editAreaLoader have been already cleaned - if( parent.editAreaLoader ) - { - parent.editAreaLoader.remove_event(parent.window, "resize", editArea.update_size); - parent.editAreaLoader.remove_event(top.window, "resize", editArea.update_size); - } - if(editAreas[editArea.id] && editAreas[editArea.id]["displayed"]){ - editArea.execCommand("EA_unload"); - } - }); - - - /*date= new Date(); - alert(date.getTime()- parent.editAreaLoader.start_time);*/ - }; - - - - //called by the toggle_on - EditArea.prototype.update_size= function(){ - var d=document,pd=parent.document,height,width,popup,maxLeft,maxTop; - - if( typeof editAreas != 'undefined' && editAreas[editArea.id] && editAreas[editArea.id]["displayed"]==true){ - if(editArea.fullscreen['isFull']){ - pd.getElementById("frame_"+editArea.id).style.width = pd.getElementsByTagName("html")[0].clientWidth + "px"; - pd.getElementById("frame_"+editArea.id).style.height = pd.getElementsByTagName("html")[0].clientHeight + "px"; - } - - if(editArea.tab_browsing_area.style.display=='block' && ( !editArea.isIE || editArea.isIE >= 8 ) ) - { - editArea.tab_browsing_area.style.height = "0px"; - editArea.tab_browsing_area.style.height = (editArea.result.offsetTop - editArea.tab_browsing_area.offsetTop -1)+"px"; - } - - height = d.body.offsetHeight - editArea.get_all_toolbar_height() - 4; - editArea.result.style.height = height +"px"; - - width = d.body.offsetWidth -2; - editArea.result.style.width = width+"px"; - //alert("result h: "+ height+" w: "+width+"\ntoolbar h: "+this.get_all_toolbar_height()+"\nbody_h: "+document.body.offsetHeight); - - // check that the popups don't get out of the screen - for( i=0; i < editArea.inlinePopup.length; i++ ) - { - popup = _$(editArea.inlinePopup[i]["popup_id"]); - maxLeft = d.body.offsetWidth - popup.offsetWidth; - maxTop = d.body.offsetHeight - popup.offsetHeight; - if( popup.offsetTop > maxTop ) - popup.style.top = maxTop+"px"; - if( popup.offsetLeft > maxLeft ) - popup.style.left = maxLeft+"px"; - } - - editArea.manage_size( true ); - editArea.fixLinesHeight( editArea.textarea.value, 0,-1); - } - }; - - - EditArea.prototype.manage_size= function(onlyOneTime){ - if(!editAreas[this.id]) - return false; - - if(editAreas[this.id]["displayed"]==true && this.textareaFocused) - { - var area_height,resized= false; - - //1) Manage display width - //1.1) Calc the new width to use for display - if( !this.settings['word_wrap'] ) - { - var area_width= this.textarea.scrollWidth; - area_height= this.textarea.scrollHeight; - // bug on old opera versions - if(this.isOpera && this.isOpera < 9.6 ){ - area_width=10000; - } - //1.2) the width is not the same, we must resize elements - if(this.textarea.previous_scrollWidth!=area_width) - { - this.container.style.width= area_width+"px"; - this.textarea.style.width= area_width+"px"; - this.content_highlight.style.width= area_width+"px"; - this.textarea.previous_scrollWidth=area_width; - resized=true; - } - } - // manage wrap width - if( this.settings['word_wrap'] ) - { - newW=this.textarea.offsetWidth; - if( this.isFirefox || this.isIE ) - newW-=2; - if( this.isSafari ) - newW-=6; - this.content_highlight.style.width=this.selection_field_text.style.width=this.selection_field.style.width=this.test_font_size.style.width=newW+"px"; - } - - //2) Manage display height - //2.1) Calc the new height to use for display - if( this.isOpera || this.isFirefox || this.isSafari ) { - area_height= this.getLinePosTop( this.last_selection["nb_line"] + 1 ); - } else { - area_height = this.textarea.scrollHeight; - } - //2.2) the width is not the same, we must resize elements - if(this.textarea.previous_scrollHeight!=area_height) - { - this.container.style.height= (area_height+2)+"px"; - this.textarea.style.height= area_height+"px"; - this.content_highlight.style.height= area_height+"px"; - this.textarea.previous_scrollHeight= area_height; - resized=true; - } - - //3) if there is new lines, we add new line numbers in the line numeration area - if(this.last_selection["nb_line"] >= this.line_number) - { - var newLines= '', destDiv=_$("line_number"), start=this.line_number, end=this.last_selection["nb_line"]+100; - for( i = start+1; i < end; i++ ) - { - newLines+='
'+i+"
"; - this.line_number++; - } - destDiv.innerHTML= destDiv.innerHTML + newLines; - if(this.settings['word_wrap']){ - this.fixLinesHeight( this.textarea.value, start, -1 ); - } - } - - //4) be sure the text is well displayed - this.textarea.scrollTop="0px"; - this.textarea.scrollLeft="0px"; - if(resized==true){ - this.scroll_to_view(); - } - } - - if(!onlyOneTime) - setTimeout("editArea.manage_size();", 100); - }; - - EditArea.prototype.execCommand= function(cmd, param){ - - for(var i in this.plugins){ - if(typeof(this.plugins[i].execCommand)=="function"){ - if(!this.plugins[i].execCommand(cmd, param)) - return; - } - } - switch(cmd){ - case "save": - if(this.settings["save_callback"].length>0) - eval("parent."+this.settings["save_callback"]+"('"+ this.id +"', editArea.textarea.value);"); - break; - case "load": - if(this.settings["load_callback"].length>0) - eval("parent."+this.settings["load_callback"]+"('"+ this.id +"');"); - break; - case "onchange": - if(this.settings["change_callback"].length>0) - eval("parent."+this.settings["change_callback"]+"('"+ this.id +"');"); - break; - case "EA_load": - if(this.settings["EA_load_callback"].length>0) - eval("parent."+this.settings["EA_load_callback"]+"('"+ this.id +"');"); - break; - case "EA_unload": - if(this.settings["EA_unload_callback"].length>0) - eval("parent."+this.settings["EA_unload_callback"]+"('"+ this.id +"');"); - break; - case "toggle_on": - if(this.settings["EA_toggle_on_callback"].length>0) - eval("parent."+this.settings["EA_toggle_on_callback"]+"('"+ this.id +"');"); - break; - case "toggle_off": - if(this.settings["EA_toggle_off_callback"].length>0) - eval("parent."+this.settings["EA_toggle_off_callback"]+"('"+ this.id +"');"); - break; - case "re_sync": - if(!this.do_highlight) - break; - case "file_switch_on": - if(this.settings["EA_file_switch_on_callback"].length>0) - eval("parent."+this.settings["EA_file_switch_on_callback"]+"(param);"); - break; - case "file_switch_off": - if(this.settings["EA_file_switch_off_callback"].length>0) - eval("parent."+this.settings["EA_file_switch_off_callback"]+"(param);"); - break; - case "file_close": - if(this.settings["EA_file_close_callback"].length>0) - return eval("parent."+this.settings["EA_file_close_callback"]+"(param);"); - break; - - default: - if(typeof(eval("editArea."+cmd))=="function") - { - if(this.settings["debug"]) - eval("editArea."+ cmd +"(param);"); - else - try{eval("editArea."+ cmd +"(param);");}catch(e){}; - } - } - }; - - EditArea.prototype.get_translation= function(word, mode){ - if(mode=="template") - return parent.editAreaLoader.translate(word, this.settings["language"], mode); - else - return parent.editAreaLoader.get_word_translation(word, this.settings["language"]); - }; - - EditArea.prototype.add_plugin= function(plug_name, plug_obj){ - for(var i=0; i"); - } - }; - - EditArea.prototype.load_script= function(url){ - try{ - script = document.createElement("script"); - script.type = "text/javascript"; - script.src = url; - script.charset= "UTF-8"; - head = document.getElementsByTagName("head"); - head[0].appendChild(script); - }catch(e){ - document.write("\";\n", $sub_scripts); - - - // add the script and use a last compression - if( $this->param['compress'] ) - { - $last_comp = array( 'Á' => 'this', - 'Â' => 'textarea', - 'Ã' => 'function', - 'Ä' => 'prototype', - 'Å' => 'settings', - 'Æ' => 'length', - 'Ç' => 'style', - 'È' => 'parent', - 'É' => 'last_selection', - 'Ê' => 'value', - 'Ë' => 'true', - 'Ì' => 'false' - /*, - 'Î' => '"', - 'Ï' => "\n", - 'À' => "\r"*/); - } - else - { - $last_comp = array(); - } - - $js_replace= ''; - foreach( $last_comp as $key => $val ) - $js_replace .= ".replace(/". $key ."/g,'". str_replace( array("\n", "\r"), array('\n','\r'), $val ) ."')"; - - $this->datas.= sprintf("editAreaLoader.iframe_script= \"\"%s;\n", - str_replace( array_values($last_comp), array_keys($last_comp), $sub_scripts ), - $js_replace); - - if($this->load_all_plugins) - $this->datas.="editAreaLoader.all_plugins_loaded=true;\n"; - - - // load the template - $this->datas.= sprintf("editAreaLoader.template= \"%s\";\n", $this->get_html_content("template.html")); - // load the css - $this->datas.= sprintf("editAreaLoader.iframe_css= \"\";\n", $this->get_css_content("edit_area.css")); - - // $this->datas= "function editArea(){};editArea.prototype.loader= function(){alert('bouhbouh');} var a= new editArea();a.loader();"; - - } - - function send_datas() - { - if($this->param['debug']){ - $header=sprintf("/* USE PHP COMPRESSION\n"); - $header.=sprintf("javascript size: based files: %s => PHP COMPRESSION => %s ", $this->file_loaded_size, strlen($this->datas)); - if($this->use_gzip){ - $gzip_datas= gzencode($this->datas, 9, FORCE_GZIP); - $header.=sprintf("=> GZIP COMPRESSION => %s", strlen($gzip_datas)); - $ratio = round(100 - strlen($gzip_datas) / $this->file_loaded_size * 100.0); - }else{ - $ratio = round(100 - strlen($this->datas) / $this->file_loaded_size * 100.0); - } - $header.=sprintf(", reduced by %s%%\n", $ratio); - $header.=sprintf("compression time: %s\n", $this->get_microtime()-$this->start_time); - $header.=sprintf("%s\n", implode("\n", $this->infos)); - $header.=sprintf("*/\n"); - $this->datas= $header.$this->datas; - } - $mtime= time(); // ensure that the 2 disk files will have the same update time - // generate gzip file and cahce it if using disk cache - if($this->use_gzip){ - $this->gzip_datas= gzencode($this->datas, 9, FORCE_GZIP); - if($this->param['use_disk_cache']) - $this->file_put_contents($this->gzip_cache_file, $this->gzip_datas, $mtime); - } - - // generate full js file and cache it if using disk cache - if($this->param['use_disk_cache']) - $this->file_put_contents($this->full_cache_file, $this->datas, $mtime); - - // generate output - if($this->use_gzip) - echo $this->gzip_datas; - else - echo $this->datas; - -// die; - } - - - function get_content($end_uri) - { - $end_uri=preg_replace("/\.\./", "", $end_uri); // Remove any .. (security) - $file= $this->path.$end_uri; - if(file_exists($file)){ - $this->infos[]=sprintf("'%s' loaded", $end_uri); - /*$fd = fopen($file, 'rb'); - $content = fread($fd, filesize($file)); - fclose($fd); - return $content;*/ - return $this->file_get_contents($file); - }else{ - $this->infos[]=sprintf("'%s' not loaded", $end_uri); - return ""; - } - } - - function get_javascript_content($end_uri) - { - $val=$this->get_content($end_uri); - - $this->compress_javascript($val); - $this->prepare_string_for_quotes($val); - return $val; - } - - function compress_javascript(&$code) - { - if($this->param['compress']) - { - // remove all comments - // (\"(?:[^\"\\]*(?:\\\\)*(?:\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\]*(?:\\\\)*(?:\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$)) - $code= preg_replace("/(\"(?:[^\"\\\\]*(?:\\\\\\\\)*(?:\\\\\"?)?)*(?:\"|$))|(\'(?:[^\'\\\\]*(?:\\\\\\\\)*(?:\\\\\'?)?)*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code); - // remove line return, empty line and tabulation - $code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code); - // add line break before "else" otherwise navigators can't manage to parse the file - $code= preg_replace('/(\b(else)\b)/', "\n$1", $code); - // remove unnecessary spaces - $code= preg_replace('/( |\t|\r)*(;|\{|\}|=|==|\-|\+|,|\(|\)|\|\||&\&|\:)( |\t|\r)*/', "$2", $code); - } - } - - function get_css_content($end_uri){ - $code=$this->get_content($end_uri); - // remove comments - $code= preg_replace("/(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "", $code); - // remove spaces - $code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', "", $code); - // remove spaces - $code= preg_replace('/( |\t|\r)?(\:|,|\{|\})( |\t|\r)+/', "$2", $code); - - $this->prepare_string_for_quotes($code); - return $code; - } - - function get_html_content($end_uri){ - $code=$this->get_content($end_uri); - //$code= preg_replace('/(\"(?:\\\"|[^\"])*(?:\"|$))|' . "(\'(?:\\\'|[^\'])*(?:\'|$))|(?:\/\/(?:.|\r|\t)*?(\n|$))|(?:\/\*(?:.|\n|\r|\t)*?(?:\*\/|$))/s", "$1$2$3", $code); - $code= preg_replace('/(( |\t|\r)*\n( |\t)*)+/s', " ", $code); - $this->prepare_string_for_quotes($code); - return $code; - } - - function prepare_string_for_quotes(&$str){ - // prepare the code to be putted into quotes - /*$pattern= array("/(\\\\)?\"/", '/\\\n/' , '/\\\r/' , "/(\r?\n)/"); - $replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r' , '\\\n"$1+"');*/ - $pattern= array("/(\\\\)?\"/", '/\\\n/' , '/\\\r/' , "/(\r?\n)/"); - if($this->param['compress']) - $replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r' , '\n'); - else - $replace= array('$1$1\\"', '\\\\\\n', '\\\\\\r' , "\\n\"\n+\""); - $str= preg_replace($pattern, $replace, $str); - } - - function replace_scripts($var, $param1, $param2) - { - $this->$var=stripslashes($param2); - return $param1."[];"; - } - - /* for php version that have not thoses functions */ - function file_get_contents($file) - { - $fd = fopen($file, 'rb'); - $content = fread($fd, filesize($file)); - fclose($fd); - $this->file_loaded_size+= strlen($content); - return $content; - } - - function file_put_contents($file, &$content, $mtime=-1) - { - if($mtime==-1) - $mtime=time(); - $fp = @fopen($file, "wb"); - if ($fp) { - fwrite($fp, $content); - fclose($fp); - touch($file, $mtime); - return true; - } - return false; - } - - function get_microtime() - { - list($usec, $sec) = explode(" ", microtime()); - return ((float)$usec + (float)$sec); - } - } -?> diff --git a/experiment/simulation/exp6/edit_area/edit_area_full.gz b/experiment/simulation/exp6/edit_area/edit_area_full.gz deleted file mode 100755 index 29bcc50..0000000 Binary files a/experiment/simulation/exp6/edit_area/edit_area_full.gz and /dev/null differ diff --git a/experiment/simulation/exp6/edit_area/edit_area_full.js b/experiment/simulation/exp6/edit_area/edit_area_full.js deleted file mode 100755 index 267574c..0000000 --- a/experiment/simulation/exp6/edit_area/edit_area_full.js +++ /dev/null @@ -1,38 +0,0 @@ - function EAL(){var t=this;t.version="0.8.2";date=new Date();t.start_time=date.getTime();t.win="loading";t.error=false;t.baseURL="";t.template="";t.lang={};t.load_syntax={};t.syntax={};t.loadedFiles=[];t.waiting_loading={};t.scripts_to_load=[];t.sub_scripts_to_load=[];t.syntax_display_name={'basic':'Basic','brainfuck':'Brainfuck','c':'C','coldfusion':'Coldfusion','cpp':'CPP','css':'CSS','html':'HTML','java':'Java','js':'Javascript','pas':'Pascal','perl':'Perl','php':'Php','python':'Python','robotstxt':'Robots txt','ruby':'Ruby','sql':'SQL','tsql':'T-SQL','vb':'Visual Basic','xml':'XML'};t.resize=[];t.hidden={};t.default_settings={debug:false,smooth_selection:true,font_size:"10",font_family:"monospace",start_highlight:false,toolbar:"search,go_to_line,fullscreen,|,undo,redo,|,select_font,|,change_smooth_selection,highlight,reset_highlight,word_wrap,|,help",begin_toolbar:"",end_toolbar:"",is_multi_files:false,allow_resize:"both",show_line_colors:false,min_width:400,min_height:125,replace_tab_by_spaces:false,allow_toggle:true,language:"en",syntax:"",syntax_selection_allow:"basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml",display:"onload",max_undo:30,browsers:"known",plugins:"",gecko_spellcheck:false,fullscreen:false,is_editable:true,cursor_position:"begin",word_wrap:false,autocompletion:false,load_callback:"",save_callback:"",change_callback:"",submit_callback:"",EA_init_callback:"",EA_delete_callback:"",EA_load_callback:"",EA_unload_callback:"",EA_toggle_on_callback:"",EA_toggle_off_callback:"",EA_file_switch_on_callback:"",EA_file_switch_off_callback:"",EA_file_close_callback:""};t.advanced_buttons=[ ['new_document','newdocument.gif','new_document',false],['search','search.gif','show_search',false],['go_to_line','go_to_line.gif','go_to_line',false],['undo','undo.gif','undo',true],['redo','redo.gif','redo',true],['change_smooth_selection','smooth_selection.gif','change_smooth_selection_mode',true],['reset_highlight','reset_highlight.gif','resync_highlight',true],['highlight','highlight.gif','change_highlight',true],['help','help.gif','show_help',false],['save','save.gif','save',false],['load','load.gif','load',false],['fullscreen','fullscreen.gif','toggle_full_screen',false],['word_wrap','word_wrap.gif','toggle_word_wrap',true],['autocompletion','autocompletion.gif','toggle_autocompletion',true] ];t.set_browser_infos(t);if(t.isIE>=6||t.isGecko||(t.isWebKit&&!t.isSafari<3)||t.isOpera>=9||t.isCamino)t.isValidBrowser=true; -else t.isValidBrowser=false;t.set_base_url();for(var i=0;i0)s["toolbar"]=s["begin_toolbar"]+","+s["toolbar"];if(s["end_toolbar"].length>0)s["toolbar"]=s["toolbar"]+","+s["end_toolbar"];s["tab_toolbar"]=s["toolbar"].replace(/ /g,"").split(",");s["plugins"]=s["plugins"].replace(/ /g,"").split(",");for(i=0;i0){s["syntax"]=s["syntax"].toLowerCase();t.load_script(t.baseURL+"reg_syntax/"+s["syntax"]+".js");}eAs[s["id"]]={"settings":s};eAs[s["id"]]["displayed"]=false;eAs[s["id"]]["hidden"]=false;t.start(s["id"]);},delete_instance:function(id){var d=document,fs=window.frames,span,iframe;eAL.execCommand(id,"EA_delete");if(fs["frame_"+id]&&fs["frame_"+id].editArea){if(eAs[id]["displayed"])eAL.toggle(id,"off");fs["frame_"+id].editArea.execCommand("EA_unload");}span=d.getElementById("EditAreaArroundInfos_"+id);if(span)span.parentNode.removeChild(span);iframe=d.getElementById("frame_"+id);if(iframe){iframe.parentNode.removeChild(iframe);try{delete fs["frame_"+id];}catch(e){}}delete eAs[id];},start:function(id){var t=this,d=document,f,span,father,next,html='',html_toolbar_content='',template,content,i;if(t.win!="loaded"){setTimeout("eAL.start('"+id+"');",50);return;}for(i in t.waiting_loading){if(t.waiting_loading[i]!="loaded"&&typeof(t.waiting_loading[i])!="function"){setTimeout("eAL.start('"+id+"');",50);return;}}if(!t.lang[eAs[id]["settings"]["language"]]||(eAs[id]["settings"]["syntax"].length>0&&!t.load_syntax[eAs[id]["settings"]["syntax"]])){setTimeout("eAL.start('"+id+"');",50);return;}if(eAs[id]["settings"]["syntax"].length>0)t.init_syntax_regexp();if(!d.getElementById("EditAreaArroundInfos_"+id)&&(eAs[id]["settings"]["debug"]||eAs[id]["settings"]["allow_toggle"])){span=d.createElement("span");span.id="EditAreaArroundInfos_"+id;if(eAs[id]["settings"]["allow_toggle"]){checked=(eAs[id]["settings"]["display"]=="onload")?"checked='checked'":"";html+="
";html+="";html+="
";}if(eAs[id]["settings"]["debug"])html+="
";html=t.translate(html,eAs[id]["settings"]["language"]);span.innerHTML=html;father=d.getElementById(id).parentNode;next=d.getElementById(id).nextSibling;if(next==null)father.appendChild(span); -else father.insertBefore(span,next);}if(!eAs[id]["initialized"]){t.execCommand(id,"EA_init");if(eAs[id]["settings"]["display"]=="later"){eAs[id]["initialized"]=true;return;}}if(t.isIE){t.init_ie_textarea(id);}var area=eAs[id];for(i=0;i';}for(i=0;i';t.iframe_script+='';}if(!t.iframe_css){t.iframe_css="";}template=t.template.replace(/\[__BASEURL__\]/g,t.baseURL);template=template.replace("[__TOOLBAR__]",html_toolbar_content);template=t.translate(template,area["settings"]["language"],"template");template=template.replace("[__CSSRULES__]",t.iframe_css);template=template.replace("[__JSCODE__]",t.iframe_script);template=template.replace("[__EA_VERSION__]",t.version);area.textarea=d.getElementById(area["settings"]["id"]);eAs[area["settings"]["id"]]["textarea"]=area.textarea;if(typeof(window.frames["frame_"+area["settings"]["id"]])!='undefined')delete window.frames["frame_"+area["settings"]["id"]];father=area.textarea.parentNode;content=d.createElement("iframe");content.name="frame_"+area["settings"]["id"];content.id="frame_"+area["settings"]["id"];content.style.borderWidth="0px";setAttribute(content,"frameBorder","0");content.style.overflow="hidden";content.style.display="none";next=area.textarea.nextSibling;if(next==null)father.appendChild(content); -else father.insertBefore(content,next);f=window.frames["frame_"+area["settings"]["id"]];f.document.open();f.eAs=eAs;f.area_id=area["settings"]["id"];f.document.area_id=area["settings"]["id"];f.document.write(template);f.document.close();},toggle:function(id,toggle_to){if(!toggle_to)toggle_to=(eAs[id]["displayed"]==true)?"off":"on";if(eAs[id]["displayed"]==true&&toggle_to=="off"){this.toggle_off(id);} -else if(eAs[id]["displayed"]==false&&toggle_to=="on"){this.toggle_on(id);}return false;},toggle_off:function(id){var fs=window.frames,f,t,parNod,nxtSib,selStart,selEnd,scrollTop,scrollLeft;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];if(f.editArea.fullscreen['isFull'])f.editArea.toggle_full_screen(false);eAs[id]["displayed"]=false;t.wrap="off";setAttribute(t,"wrap","off");parNod=t.parentNode;nxtSib=t.nextSibling;parNod.removeChild(t);parNod.insertBefore(t,nxtSib);t.value=f.editArea.textarea.value;selStart=f.editArea.last_selection["selectionStart"];selEnd=f.editArea.last_selection["selectionEnd"];scrollTop=f.document.getElementById("result").scrollTop;scrollLeft=f.document.getElementById("result").scrollLeft;document.getElementById("frame_"+id).style.display='none';t.style.display="inline";try{t.focus();}catch(e){};if(this.isIE){t.selectionStart=selStart;t.selectionEnd=selEnd;t.focused=true;set_IE_selection(t);} -else{if(this.isOpera&&this.isOpera < 9.6){t.setSelectionRange(0,0);}try{t.setSelectionRange(selStart,selEnd);}catch(e){};}t.scrollTop=scrollTop;t.scrollLeft=scrollLeft;f.editArea.execCommand("toggle_off");}},toggle_on:function(id){var fs=window.frames,f,t,selStart=0,selEnd=0,scrollTop=0,scrollLeft=0,curPos,elem;if(fs["frame_"+id]){f=fs["frame_"+id];t=eAs[id]["textarea"];area=f.editArea;area.textarea.value=t.value;curPos=eAs[id]["settings"]["cursor_position"];if(t.use_last==true){selStart=t.last_selectionStart;selEnd=t.last_selectionEnd;scrollTop=t.last_scrollTop;scrollLeft=t.last_scrollLeft;t.use_last=false;} -else if(curPos=="auto"){try{selStart=t.selectionStart;selEnd=t.selectionEnd;scrollTop=t.scrollTop;scrollLeft=t.scrollLeft;}catch(ex){}}this.set_editarea_size_from_textarea(id,document.getElementById("frame_"+id));t.style.display="none";document.getElementById("frame_"+id).style.display="inline";area.execCommand("focus");eAs[id]["displayed"]=true;area.execCommand("update_size");f.document.getElementById("result").scrollTop=scrollTop;f.document.getElementById("result").scrollLeft=scrollLeft;area.area_select(selStart,selEnd-selStart);area.execCommand("toggle_on");} -else{elem=document.getElementById(id);elem.last_selectionStart=elem.selectionStart;elem.last_selectionEnd=elem.selectionEnd;elem.last_scrollTop=elem.scrollTop;elem.last_scrollLeft=elem.scrollLeft;elem.use_last=true;eAL.start(id);}},set_editarea_size_from_textarea:function(id,frame){var elem,width,height;elem=document.getElementById(id);width=Math.max(eAs[id]["settings"]["min_width"],elem.offsetWidth)+"px";height=Math.max(eAs[id]["settings"]["min_height"],elem.offsetHeight)+"px";if(elem.style.width.indexOf("%")!=-1)width=elem.style.width;if(elem.style.height.indexOf("%")!=-1)height=elem.style.height;frame.style.width=width;frame.style.height=height;},set_base_url:function(){var t=this,elems,i,docBasePath;if(!this.baseURL){elems=document.getElementsByTagName('script');for(i=0;i';html+='';return html;},get_control_html:function(button_name,lang){var t=this,i,but,html,si;for(i=0;i";case "|":case "separator":return '';case "select_font":html="";return html;case "syntax_selection":html="";return html;}return "["+button_name+"]";},get_template:function(){if(this.template==""){var xhr_object=null;if(window.XMLHttpRequest)xhr_object=new XMLHttpRequest(); -else if(window.ActiveXObject)xhr_object=new ActiveXObject("Microsoft.XMLHTTP"); -else{alert("XMLHTTPRequest not supported. EditArea not loaded");return;}xhr_object.open("GET",this.baseURL+"template.html",false);xhr_object.send(null);if(xhr_object.readyState==4)this.template=xhr_object.responseText; -else this.has_error();}},translate:function(text,lang,mode){if(mode=="word")text=eAL.get_word_translation(text,lang); -else if(mode="template"){eAL.current_language=lang;text=text.replace(/\{\$([^\}]+)\}/gm,eAL.translate_template);}return text;},translate_template:function(){return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1],eAL.current_language);},get_word_translation:function(val,lang){var i;for(i in eAL.lang[lang]){if(i==val)return eAL.lang[lang][i];}return "_"+val;},load_script:function(url){var t=this,d=document,script,head;if(t.loadedFiles[url])return;try{script=d.createElement("script");script.type="text/javascript";script.src=url;script.charset="UTF-8";d.getElementsByTagName("head")[0].appendChild(script);}catch(e){d.write('');}t.loadedFiles[url]=true;},add_event:function(obj,name,handler){try{if(obj.attachEvent){obj.attachEvent("on"+name,handler);} -else{obj.addEventListener(name,handler,false);}}catch(e){}},remove_event:function(obj,name,handler){try{if(obj.detachEvent)obj.detachEvent("on"+name,handler); -else obj.removeEventListener(name,handler,false);}catch(e){}},reset:function(e){var formObj,is_child,i,x;formObj=eAL.isIE ? window.event.srcElement:e.target;if(formObj.tagName!='FORM')formObj=formObj.form;for(i in eAs){is_child=false;for(x=0;x old_sel["start"])this.setSelectionRange(id,new_sel["end"],new_sel["end"]); -else this.setSelectionRange(id,old_sel["start"]+open_tag.length,old_sel["start"]+open_tag.length);},hide:function(id){var fs=window.frames,d=document,t=this,scrollTop,scrollLeft,span;if(d.getElementById(id)&&!t.hidden[id]){t.hidden[id]={};t.hidden[id]["selectionRange"]=t.getSelectionRange(id);if(d.getElementById(id).style.display!="none"){t.hidden[id]["scrollTop"]=d.getElementById(id).scrollTop;t.hidden[id]["scrollLeft"]=d.getElementById(id).scrollLeft;}if(fs["frame_"+id]){t.hidden[id]["toggle"]=eAs[id]["displayed"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){scrollTop=fs["frame_"+id].document.getElementById("result").scrollTop;scrollLeft=fs["frame_"+id].document.getElementById("result").scrollLeft;} -else{scrollTop=d.getElementById(id).scrollTop;scrollLeft=d.getElementById(id).scrollLeft;}t.hidden[id]["scrollTop"]=scrollTop;t.hidden[id]["scrollLeft"]=scrollLeft;if(eAs[id]["displayed"]==true)eAL.toggle_off(id);}span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='none';}d.getElementById(id).style.display="none";}},show:function(id){var fs=window.frames,d=document,t=this,span;if((elem=d.getElementById(id))&&t.hidden[id]){elem.style.display="inline";elem.scrollTop=t.hidden[id]["scrollTop"];elem.scrollLeft=t.hidden[id]["scrollLeft"];span=d.getElementById("EditAreaArroundInfos_"+id);if(span){span.style.display='inline';}if(fs["frame_"+id]){elem.style.display="inline";if(t.hidden[id]["toggle"]==true)eAL.toggle_on(id);scrollTop=t.hidden[id]["scrollTop"];scrollLeft=t.hidden[id]["scrollLeft"];if(fs["frame_"+id]&&eAs[id]["displayed"]==true){fs["frame_"+id].document.getElementById("result").scrollTop=scrollTop;fs["frame_"+id].document.getElementById("result").scrollLeft=scrollLeft;} -else{elem.scrollTop=scrollTop;elem.scrollLeft=scrollLeft;}}sel=t.hidden[id]["selectionRange"];t.setSelectionRange(id,sel["start"],sel["end"]);delete t.hidden[id];}},getCurrentFile:function(id){return this.execCommand(id,'get_file',this.execCommand(id,'curr_file'));},getFile:function(id,file_id){return this.execCommand(id,'get_file',file_id);},getAllFiles:function(id){return this.execCommand(id,'get_all_files()');},openFile:function(id,file_infos){return this.execCommand(id,'open_file',file_infos);},closeFile:function(id,file_id){return this.execCommand(id,'close_file',file_id);},setFileEditedMode:function(id,file_id,to){var reg1,reg2;reg1=new RegExp('\\\\','g');reg2=new RegExp('"','g');return this.execCommand(id,'set_file_edited_mode("'+file_id.replace(reg1,'\\\\').replace(reg2,'\\"')+'",'+to+')');},execCommand:function(id,cmd,fct_param){switch(cmd){case "EA_init":if(eAs[id]['settings']["EA_init_callback"].length>0)eval(eAs[id]['settings']["EA_init_callback"]+"('"+id+"');");break;case "EA_delete":if(eAs[id]['settings']["EA_delete_callback"].length>0)eval(eAs[id]['settings']["EA_delete_callback"]+"('"+id+"');");break;case "EA_submit":if(eAs[id]['settings']["submit_callback"].length>0)eval(eAs[id]['settings']["submit_callback"]+"('"+id+"');");break;}if(window.frames["frame_"+id]&&window.frames["frame_"+id].editArea){if(fct_param!=undefined)return eval('window.frames["frame_'+id+'"].editArea.'+cmd+'(fct_param);'); -else return eval('window.frames["frame_'+id+'"].editArea.'+cmd+';');}return false;}};var eAL=new EAL();var eAs={}; function getAttribute(elm,aName){var aValue,taName,i;try{aValue=elm.getAttribute(aName);}catch(exept){}if(! aValue){for(i=0;i < elm.attributes.length;i++){taName=elm.attributes[i] .name.toLowerCase();if(taName==aName){aValue=elm.attributes[i] .value;return aValue;}}}return aValue;};function setAttribute(elm,attr,val){if(attr=="class"){elm.setAttribute("className",val);elm.setAttribute("class",val);} -else{elm.setAttribute(attr,val);}};function getChildren(elem,elem_type,elem_attribute,elem_attribute_match,option,depth){if(!option)var option="single";if(!depth)var depth=-1;if(elem){var children=elem.childNodes;var result=null;var results=[];for(var x=0;x0){results=results.concat(result);}} -else if(result!=null){return result;}}}}if(option=="all")return results;}return null;};function isChildOf(elem,parent){if(elem){if(elem==parent)return true;while(elem.parentNode !='undefined'){return isChildOf(elem.parentNode,parent);}}return false;};function getMouseX(e){if(e!=null&&typeof(e.pageX)!="undefined"){return e.pageX;} -else{return(e!=null?e.x:event.x)+document.documentElement.scrollLeft;}};function getMouseY(e){if(e!=null&&typeof(e.pageY)!="undefined"){return e.pageY;} -else{return(e!=null?e.y:event.y)+document.documentElement.scrollTop;}};function calculeOffsetLeft(r){return calculeOffset(r,"offsetLeft")};function calculeOffsetTop(r){return calculeOffset(r,"offsetTop")};function calculeOffset(element,attr){var offset=0;while(element){offset+=element[attr];element=element.offsetParent}return offset;};function get_css_property(elem,prop){if(document.defaultView){return document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop);} -else if(elem.currentStyle){var prop=prop.replace(/-\D/gi,function(sMatch){return sMatch.charAt(sMatch.length-1).toUpperCase();});return elem.currentStyle[prop];} -else return null;}var _mCE;function start_move_element(e,id,frame){var elem_id=(e.target||e.srcElement).id;if(id)elem_id=id;if(!frame)frame=window;if(frame.event)e=frame.event;_mCE=frame.document.getElementById(elem_id);_mCE.frame=frame;frame.document.onmousemove=move_element;frame.document.onmouseup=end_move_element;mouse_x=getMouseX(e);mouse_y=getMouseY(e);_mCE.start_pos_x=mouse_x-(_mCE.style.left.replace("px","")||calculeOffsetLeft(_mCE));_mCE.start_pos_y=mouse_y-(_mCE.style.top.replace("px","")||calculeOffsetTop(_mCE));return false;};function end_move_element(e){_mCE.frame.document.onmousemove="";_mCE.frame.document.onmouseup="";_mCE=null;};function move_element(e){var newTop,newLeft,maxLeft;if(_mCE.frame&&_mCE.frame.event)e=_mCE.frame.event;newTop=getMouseY(e)-_mCE.start_pos_y;newLeft=getMouseX(e)-_mCE.start_pos_x;maxLeft=_mCE.frame.document.body.offsetWidth-_mCE.offsetWidth;max_top=_mCE.frame.document.body.offsetHeight-_mCE.offsetHeight;newTop=Math.min(Math.max(0,newTop),max_top);newLeft=Math.min(Math.max(0,newLeft),maxLeft);_mCE.style.top=newTop+"px";_mCE.style.left=newLeft+"px";return false;};var nav=eAL.nav;function getSelectionRange(textarea){return{"start":textarea.selectionStart,"end":textarea.selectionEnd};};function setSelectionRange(t,start,end){t.focus();start=Math.max(0,Math.min(t.value.length,start));end=Math.max(start,Math.min(t.value.length,end));if(nav.isOpera&&nav.isOpera < 9.6){t.selectionEnd=1;t.selectionStart=0;t.selectionEnd=1;t.selectionStart=0;}t.selectionStart=start;t.selectionEnd=end;if(nav.isIE)set_IE_selection(t);};function get_IE_selection(t){var d=document,div,range,stored_range,elem,scrollTop,relative_top,line_start,line_nb,range_start,range_end,tab;if(t&&t.focused){if(!t.ea_line_height){div=d.createElement("div");div.style.fontFamily=get_css_property(t,"font-family");div.style.fontSize=get_css_property(t,"font-size");div.style.visibility="hidden";div.innerHTML="0";d.body.appendChild(div);t.ea_line_height=div.offsetHeight;d.body.removeChild(div);}range=d.selection.createRange();try{stored_range=range.duplicate();stored_range.moveToElementText(t);stored_range.setEndPoint('EndToEnd',range);if(stored_range.parentElement()==t){elem=t;scrollTop=0;while(elem.parentNode){scrollTop+=elem.scrollTop;elem=elem.parentNode;}relative_top=range.offsetTop-calculeOffsetTop(t)+scrollTop;line_start=Math.round((relative_top / t.ea_line_height)+1);line_nb=Math.round(range.boundingHeight / t.ea_line_height);range_start=stored_range.text.length-range.text.length;tab=t.value.substr(0,range_start).split("\n");range_start+=(line_start-tab.length)*2;t.selectionStart=range_start;range_end=t.selectionStart+range.text.length;tab=t.value.substr(0,range_start+range.text.length).split("\n");range_end+=(line_start+line_nb-1-tab.length)*2;t.selectionEnd=range_end;}}catch(e){}}if(t&&t.id){setTimeout("get_IE_selection(document.getElementById('"+t.id+"'));",50);}};function IE_textarea_focus(){event.srcElement.focused=true;}function IE_textarea_blur(){event.srcElement.focused=false;}function set_IE_selection(t){var nbLineStart,nbLineStart,nbLineEnd,range;if(!window.closed){nbLineStart=t.value.substr(0,t.selectionStart).split("\n").length-1;nbLineEnd=t.value.substr(0,t.selectionEnd).split("\n").length-1;try{range=document.selection.createRange();range.moveToElementText(t);range.setEndPoint('EndToStart',range);range.moveStart('character',t.selectionStart-nbLineStart);range.moveEnd('character',t.selectionEnd-nbLineEnd-(t.selectionStart-nbLineStart));range.select();}catch(e){}}};eAL.waiting_loading["elements_functions.js"]="loaded"; - EAL.prototype.start_resize_area=function(){var d=document,a,div,width,height,father;d.onmouseup=eAL.end_resize_area;d.onmousemove=eAL.resize_area;eAL.toggle(eAL.resize["id"]);a=eAs[eAL.resize["id"]]["textarea"];div=d.getElementById("edit_area_resize");if(!div){div=d.createElement("div");div.id="edit_area_resize";div.style.border="dashed #888888 1px";}width=a.offsetWidth-2;height=a.offsetHeight-2;div.style.display="block";div.style.width=width+"px";div.style.height=height+"px";father=a.parentNode;father.insertBefore(div,a);a.style.display="none";eAL.resize["start_top"]=calculeOffsetTop(div);eAL.resize["start_left"]=calculeOffsetLeft(div);};EAL.prototype.end_resize_area=function(e){var d=document,div,a,width,height;d.onmouseup="";d.onmousemove="";div=d.getElementById("edit_area_resize");a=eAs[eAL.resize["id"]]["textarea"];width=Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"],div.offsetWidth-4);height=Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"],div.offsetHeight-4);if(eAL.isIE==6){width-=2;height-=2;}a.style.width=width+"px";a.style.height=height+"px";div.style.display="none";a.style.display="inline";a.selectionStart=eAL.resize["selectionStart"];a.selectionEnd=eAL.resize["selectionEnd"];eAL.toggle(eAL.resize["id"]);return false;};EAL.prototype.resize_area=function(e){var allow,newHeight,newWidth;allow=eAs[eAL.resize["id"]]["settings"]["allow_resize"];if(allow=="both"||allow=="y"){newHeight=Math.max(20,getMouseY(e)-eAL.resize["start_top"]);document.getElementById("edit_area_resize").style.height=newHeight+"px";}if(allow=="both"||allow=="x"){newWidth=Math.max(20,getMouseX(e)-eAL.resize["start_left"]);document.getElementById("edit_area_resize").style.width=newWidth+"px";}return false;};eAL.waiting_loading["resize_area.js"]="loaded"; - EAL.prototype.get_regexp=function(text_array){res="(\\b)(";for(i=0;i0)res+="|";res+=this.get_escaped_regexp(text_array[i]);}res+=")(\\b)";reg=new RegExp(res);return res;};EAL.prototype.get_escaped_regexp=function(str){return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g,"\\$1");};EAL.prototype.init_syntax_regexp=function(){var lang_style={};for(var lang in this.load_syntax){if(!this.syntax[lang]){this.syntax[lang]={};this.syntax[lang]["keywords_reg_exp"]={};this.keywords_reg_exp_nb=0;if(this.load_syntax[lang]['KEYWORDS']){param="g";if(this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE']===false)param+="i";for(var i in this.load_syntax[lang]['KEYWORDS']){if(typeof(this.load_syntax[lang]['KEYWORDS'][i])=="function")continue;this.syntax[lang]["keywords_reg_exp"][i]=new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]),param);this.keywords_reg_exp_nb++;}}if(this.load_syntax[lang]['OPERATORS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['OPERATORS']){if(typeof(this.load_syntax[lang]['OPERATORS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]);nb++;}if(str.length>0)this.syntax[lang]["operators_reg_exp"]=new RegExp("("+str+")","g");}if(this.load_syntax[lang]['DELIMITERS']){var str="";var nb=0;for(var i in this.load_syntax[lang]['DELIMITERS']){if(typeof(this.load_syntax[lang]['DELIMITERS'][i])=="function")continue;if(nb>0)str+="|";str+=this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]);nb++;}if(str.length>0)this.syntax[lang]["delimiters_reg_exp"]=new RegExp("("+str+")","g");}var syntax_trace=[];this.syntax[lang]["quotes"]={};var quote_tab=[];if(this.load_syntax[lang]['QUOTEMARKS']){for(var i in this.load_syntax[lang]['QUOTEMARKS']){if(typeof(this.load_syntax[lang]['QUOTEMARKS'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]);this.syntax[lang]["quotes"][x]=x;quote_tab[quote_tab.length]="("+x+"(\\\\.|[^"+x+"])*(?:"+x+"|$))";syntax_trace.push(x);}}this.syntax[lang]["comments"]={};if(this.load_syntax[lang]['COMMENT_SINGLE']){for(var i in this.load_syntax[lang]['COMMENT_SINGLE']){if(typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i])=="function")continue;var x=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]);quote_tab[quote_tab.length]="("+x+"(.|\\r|\\t)*(\\n|$))";syntax_trace.push(x);this.syntax[lang]["comments"][x]="\n";}}if(this.load_syntax[lang]['COMMENT_MULTI']){for(var i in this.load_syntax[lang]['COMMENT_MULTI']){if(typeof(this.load_syntax[lang]['COMMENT_MULTI'][i])=="function")continue;var start=this.get_escaped_regexp(i);var end=this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]);quote_tab[quote_tab.length]="("+start+"(.|\\n|\\r)*?("+end+"|$))";syntax_trace.push(start);syntax_trace.push(end);this.syntax[lang]["comments"][i]=this.load_syntax[lang]['COMMENT_MULTI'][i];}}if(quote_tab.length>0)this.syntax[lang]["comment_or_quote_reg_exp"]=new RegExp("("+quote_tab.join("|")+")","gi");if(syntax_trace.length>0)this.syntax[lang]["syntax_trace_regexp"]=new RegExp("((.|\n)*?)(\\\\*("+syntax_trace.join("|")+"|$))","gmi");if(this.load_syntax[lang]['SCRIPT_DELIMITERS']){this.syntax[lang]["script_delimiters"]={};for(var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']){if(typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i])=="function")continue;this.syntax[lang]["script_delimiters"][i]=this.load_syntax[lang]['SCRIPT_DELIMITERS'];}}this.syntax[lang]["custom_regexp"]={};if(this.load_syntax[lang]['REGEXPS']){for(var i in this.load_syntax[lang]['REGEXPS']){if(typeof(this.load_syntax[lang]['REGEXPS'][i])=="function")continue;var val=this.load_syntax[lang]['REGEXPS'][i];if(!this.syntax[lang]["custom_regexp"][val['execute']])this.syntax[lang]["custom_regexp"][val['execute']]={};this.syntax[lang]["custom_regexp"][val['execute']][i]={'regexp':new RegExp(val['search'],val['modifiers']),'class':val['class']};}}if(this.load_syntax[lang]['STYLES']){lang_style[lang]={};for(var i in this.load_syntax[lang]['STYLES']){if(typeof(this.load_syntax[lang]['STYLES'][i])=="function")continue;if(typeof(this.load_syntax[lang]['STYLES'][i])!="string"){for(var j in this.load_syntax[lang]['STYLES'][i]){lang_style[lang][j]=this.load_syntax[lang]['STYLES'][i][j];}} -else{lang_style[lang][i]=this.load_syntax[lang]['STYLES'][i];}}}var style="";for(var i in lang_style[lang]){if(lang_style[lang][i].length>0){style+="."+lang+" ."+i.toLowerCase()+" span{"+lang_style[lang][i]+"}\n";style+="."+lang+" ."+i.toLowerCase()+"{"+lang_style[lang][i]+"}\n";}}this.syntax[lang]["styles"]=style;}}};eAL.waiting_loading["reg_syntax.js"]="loaded"; -var editAreaLoader= eAL;var editAreas=eAs;EditAreaLoader=EAL;editAreaLoader.iframe_script= "".replace(/Á/g,'this').replace(/Â/g,'textarea').replace(/Ã/g,'function').replace(/Ä/g,'prototype').replace(/Å/g,'settings').replace(/Æ/g,'length').replace(/Ç/g,'style').replace(/È/g,'parent').replace(/É/g,'last_selection').replace(/Ê/g,'value').replace(/Ë/g,'true').replace(/Ì/g,'false'); -editAreaLoader.template= " EditArea [__CSSRULES__] [__JSCODE__]
[__TOOLBAR__]
 
 
{$position}: {$line_abbr} 0, {$char_abbr} 0 {$total}: {$line_abbr} 0, {$char_abbr} 0 resize
{$processing}
{$search} {$close_popup}
{$replace} {$move_popup}

{$find_next} {$replace} {$replace_all}
{$close_popup}

Editarea [__EA_VERSION__]


{$shortcuts}:

{$tab}: {$add_tab}
{$shift}+{$tab}: {$remove_tab}
{$ctrl}+f: {$search_command}
{$ctrl}+r: {$replace_command}
{$ctrl}+h: {$highlight}
{$ctrl}+g: {$go_to_line}
{$ctrl}+z: {$undo}
{$ctrl}+y: {$redo}
{$ctrl}+e: {$help}
{$ctrl}+q, {$esc}: {$close_popup}
{$accesskey} E: {$toggle}

{$about_notice}
"; -editAreaLoader.iframe_css= ""; diff --git a/experiment/simulation/exp6/edit_area/edit_area_functions.js b/experiment/simulation/exp6/edit_area/edit_area_functions.js deleted file mode 100755 index 4067b03..0000000 --- a/experiment/simulation/exp6/edit_area/edit_area_functions.js +++ /dev/null @@ -1,1202 +0,0 @@ - //replace tabulation by the good number of white spaces - EditArea.prototype.replace_tab= function(text){ - return text.replace(/((\n?)([^\t\n]*)\t)/gi, editArea.smartTab); // slower than simple replace... - }; - - // call by the replace_tab function - EditArea.prototype.smartTab= function(){ - val=" "; - return EditArea.prototype.smartTab.arguments[2] + EditArea.prototype.smartTab.arguments[3] + val.substr(0, editArea.tab_nb_char - (EditArea.prototype.smartTab.arguments[3].length)%editArea.tab_nb_char); - }; - - EditArea.prototype.show_waiting_screen= function(){ - width = this.editor_area.offsetWidth; - height = this.editor_area.offsetHeight; - if( !(this.isIE && this.isIE<6) ) - { - width -= 2; - height -= 2; - } - this.processing_screen.style.display= "block"; - this.processing_screen.style.width = width+"px"; - this.processing_screen.style.height = height+"px"; - this.waiting_screen_displayed = true; - }; - - EditArea.prototype.hide_waiting_screen= function(){ - this.processing_screen.style.display="none"; - this.waiting_screen_displayed= false; - }; - - EditArea.prototype.add_style= function(styles){ - if(styles.length>0){ - newcss = document.createElement("style"); - newcss.type="text/css"; - newcss.media="all"; - if(newcss.styleSheet){ // IE - newcss.styleSheet.cssText = styles; - } else { // W3C - newcss.appendChild(document.createTextNode(styles)); - } - document.getElementsByTagName("head")[0].appendChild(newcss); - } - }; - - EditArea.prototype.set_font= function(family, size){ - var t=this, a=this.textarea, s=this.settings, elem_font, i, elem; - // list all elements concerned by font changes - var elems= ["textarea", "content_highlight", "cursor_pos", "end_bracket", "selection_field", "selection_field_text", "line_number"]; - - if(family && family!="") - s["font_family"]= family; - if(size && size>0) - s["font_size"] = size; - if( t.isOpera && t.isOpera < 9.6 ) // opera<9.6 can't manage non monospace font - s['font_family']="monospace"; - - // update the select tag - if( elem_font = _$("area_font_size") ) - { - for( i = 0; i < elem_font.length; i++ ) - { - if( elem_font.options[i].value && elem_font.options[i].value == s["font_size"] ) - elem_font.options[i].selected=true; - } - } - - /* - * somethimes firefox has rendering mistake with non-monospace font for text width in textarea vs in div for changing font size (eg: verdana change between 11pt to 12pt) - * => looks like a browser internal random bug as text width can change while content_highlight is updated - * we'll check if the font-size produce the same text width inside textarea and div and if not, we'll increment the font-size - * - * This is an ugly fix - */ - if( t.isFirefox ) - { - var nbTry = 3; - do { - var div1 = document.createElement( 'div' ), text1 = document.createElement( 'textarea' ); - var styles = { - width: '40px', - overflow: 'scroll', - zIndex: 50, - visibility: 'hidden', - fontFamily: s["font_family"], - fontSize: s["font_size"]+"pt", - lineHeight: t.lineHeight+"px", - padding: '0', - margin: '0', - border: 'none', - whiteSpace: 'nowrap' - }; - var diff, changed = false; - for( i in styles ) - { - div1.style[ i ] = styles[i]; - text1.style[ i ] = styles[i]; - } - // no wrap for this text - text1.wrap = 'off'; - text1.setAttribute('wrap', 'off'); - t.container.appendChild( div1 ); - t.container.appendChild( text1 ); - // try to make FF to bug - div1.innerHTML = text1.value = 'azertyuiopqsdfghjklm'; - div1.innerHTML = text1.value = text1.value+'wxcvbn^p*ù$!:;,,'; - diff = text1.scrollWidth - div1.scrollWidth; - - // firefox return here a diff of 1 px between equals scrollWidth (can't explain) - if( Math.abs( diff ) >= 2 ) - { - s["font_size"]++; - changed = true; - } - t.container.removeChild( div1 ); - t.container.removeChild( text1 ); - nbTry--; - }while( changed && nbTry > 0 ); - } - - - // calc line height - elem = t.test_font_size; - elem.style.fontFamily = ""+s["font_family"]; - elem.style.fontSize = s["font_size"]+"pt"; - elem.innerHTML = "0"; - t.lineHeight = elem.offsetHeight; - - // update font for all concerned elements - for( i=0; i tags - t.add_style("pre{font-family:"+s["font_family"]+"}"); - - // old opera and IE>=8 doesn't update font changes to the textarea - if( ( t.isOpera && t.isOpera < 9.6 ) || t.isIE >= 8 ) - { - var parNod = a.parentNode, nxtSib = a.nextSibling, start= a.selectionStart, end= a.selectionEnd; - parNod.removeChild(a); - parNod.insertBefore(a, nxtSib); - t.area_select(start, end-start); - } - - // force update of selection field - this.focus(); - this.update_size(); - this.check_line_selection(); - }; - - EditArea.prototype.change_font_size= function(){ - var size=_$("area_font_size").value; - if(size>0) - this.set_font("", size); - }; - - - EditArea.prototype.open_inline_popup= function(popup_id){ - this.close_all_inline_popup(); - var popup= _$(popup_id); - var editor= _$("editor"); - - // search matching icon - for(var i=0; i lines.length) - start= this.textarea.value.length; - else{ - for(var i=0; i0){ - //alert(miss_top); - zone.scrollTop= zone.scrollTop + miss_top; - }else if( zone.scrollTop > cursor_pos_top){ - // when erase all the content -> does'nt scroll back to the top - //alert("else: "+cursor_pos_top); - zone.scrollTop= cursor_pos_top; - } - - // manage left scroll - //var cursor_pos_left= parseInt(_$("cursor_pos").style.left.replace("px","")); - var cursor_pos_left= _$("cursor_pos").cursor_left; - var max_width_visible= zone.clientWidth + zone.scrollLeft; - var miss_left= cursor_pos_left + 10 - max_width_visible; - if(miss_left>0){ - zone.scrollLeft= zone.scrollLeft + miss_left + 50; - }else if( zone.scrollLeft > cursor_pos_left){ - zone.scrollLeft= cursor_pos_left ; - }else if( zone.scrollLeft == 45){ - // show the line numbers if textarea align to it's left - zone.scrollLeft=0; - } - }; - - EditArea.prototype.check_undo= function(only_once){ - if(!editAreas[this.id]) - return false; - if(this.textareaFocused && editAreas[this.id]["displayed"]==true){ - var text=this.textarea.value; - if(this.previous.length<=1) - this.switchClassSticky(_$("undo"), 'editAreaButtonDisabled', true); - - if(!this.previous[this.previous.length-1] || this.previous[this.previous.length-1]["text"] != text){ - this.previous.push({"text": text, "selStart": this.textarea.selectionStart, "selEnd": this.textarea.selectionEnd}); - if(this.previous.length > this.settings["max_undo"]+1) - this.previous.shift(); - - } - if(this.previous.length >= 2) - this.switchClassSticky(_$("undo"), 'editAreaButtonNormal', false); - } - - if(!only_once) - setTimeout("editArea.check_undo()", 3000); - }; - - EditArea.prototype.undo= function(){ - //alert("undo"+this.previous.length); - if(this.previous.length > 0) - { - this.getIESelection(); - // var pos_cursor=this.textarea.selectionStart; - this.next.push( { "text": this.textarea.value, "selStart": this.textarea.selectionStart, "selEnd": this.textarea.selectionEnd } ); - var prev= this.previous.pop(); - if( prev["text"] == this.textarea.value && this.previous.length > 0 ) - prev =this.previous.pop(); - this.textarea.value = prev["text"]; - this.last_undo = prev["text"]; - this.area_select(prev["selStart"], prev["selEnd"]-prev["selStart"]); - this.switchClassSticky(_$("redo"), 'editAreaButtonNormal', false); - this.resync_highlight(true); - //alert("undo"+this.previous.length); - this.check_file_changes(); - } - }; - - EditArea.prototype.redo= function(){ - if(this.next.length > 0) - { - /*this.getIESelection();*/ - //var pos_cursor=this.textarea.selectionStart; - var next= this.next.pop(); - this.previous.push(next); - this.textarea.value= next["text"]; - this.last_undo= next["text"]; - this.area_select(next["selStart"], next["selEnd"]-next["selStart"]); - this.switchClassSticky(_$("undo"), 'editAreaButtonNormal', false); - this.resync_highlight(true); - this.check_file_changes(); - } - if( this.next.length == 0) - this.switchClassSticky(_$("redo"), 'editAreaButtonDisabled', true); - }; - - EditArea.prototype.check_redo= function(){ - if(editArea.next.length == 0 || editArea.textarea.value!=editArea.last_undo){ - editArea.next= []; // undo the ability to use "redo" button - editArea.switchClassSticky(_$("redo"), 'editAreaButtonDisabled', true); - } - else - { - this.switchClassSticky(_$("redo"), 'editAreaButtonNormal', false); - } - }; - - - // functions that manage icons roll over, disabled, etc... - EditArea.prototype.switchClass = function(element, class_name, lock_state) { - var lockChanged = false; - - if (typeof(lock_state) != "undefined" && element != null) { - element.classLock = lock_state; - lockChanged = true; - } - - if (element != null && (lockChanged || !element.classLock)) { - element.oldClassName = element.className; - element.className = class_name; - } - }; - - EditArea.prototype.restoreAndSwitchClass = function(element, class_name) { - if (element != null && !element.classLock) { - this.restoreClass(element); - this.switchClass(element, class_name); - } - }; - - EditArea.prototype.restoreClass = function(element) { - if (element != null && element.oldClassName && !element.classLock) { - element.className = element.oldClassName; - element.oldClassName = null; - } - }; - - EditArea.prototype.setClassLock = function(element, lock_state) { - if (element != null) - element.classLock = lock_state; - }; - - EditArea.prototype.switchClassSticky = function(element, class_name, lock_state) { - var lockChanged = false; - if (typeof(lock_state) != "undefined" && element != null) { - element.classLock = lock_state; - lockChanged = true; - } - - if (element != null && (lockChanged || !element.classLock)) { - element.className = class_name; - element.oldClassName = class_name; - } - }; - - //make the "page up" and "page down" buttons works correctly - EditArea.prototype.scroll_page= function(params){ - var dir= params["dir"], shift_pressed= params["shift"]; - var lines= this.textarea.value.split("\n"); - var new_pos=0, length=0, char_left=0, line_nb=0, curLine=0; - var toScrollAmount = _$("result").clientHeight -30; - var nbLineToScroll = 0, diff= 0; - - if(dir=="up"){ - nbLineToScroll = Math.ceil( toScrollAmount / this.lineHeight ); - - // fix number of line to scroll - for( i = this.last_selection["line_start"]; i - diff > this.last_selection["line_start"] - nbLineToScroll ; i-- ) - { - if( elem = _$('line_'+ i) ) - { - diff += Math.floor( ( elem.offsetHeight - 1 ) / this.lineHeight ); - } - } - nbLineToScroll -= diff; - - if(this.last_selection["selec_direction"]=="up"){ - for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]-nbLineToScroll, lines.length); line_nb++){ - new_pos+= lines[line_nb].length + 1; - } - char_left=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"]-1); - if(shift_pressed) - length=this.last_selection["selectionEnd"]-new_pos-char_left; - this.area_select(new_pos+char_left, length); - view="top"; - }else{ - view="bottom"; - for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]+this.last_selection["line_nb"]-1-nbLineToScroll, lines.length); line_nb++){ - new_pos+= lines[line_nb].length + 1; - } - char_left=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"]-1); - if(shift_pressed){ - //length=this.last_selection["selectionEnd"]-new_pos-char_left; - start= Math.min(this.last_selection["selectionStart"], new_pos+char_left); - length= Math.max(new_pos+char_left, this.last_selection["selectionStart"] )- start ; - if(new_pos+char_left < this.last_selection["selectionStart"]) - view="top"; - }else - start=new_pos+char_left; - this.area_select(start, length); - - } - } - else - { - var nbLineToScroll= Math.floor( toScrollAmount / this.lineHeight ); - // fix number of line to scroll - for( i = this.last_selection["line_start"]; i + diff < this.last_selection["line_start"] + nbLineToScroll ; i++ ) - { - if( elem = _$('line_'+ i) ) - { - diff += Math.floor( ( elem.offsetHeight - 1 ) / this.lineHeight ); - } - } - nbLineToScroll -= diff; - - if(this.last_selection["selec_direction"]=="down"){ - view="bottom"; - for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]+this.last_selection["line_nb"]-2+nbLineToScroll, lines.length); line_nb++){ - if(line_nb==this.last_selection["line_start"]-1) - char_left= this.last_selection["selectionStart"] -new_pos; - new_pos+= lines[line_nb].length + 1; - - } - if(shift_pressed){ - length=Math.abs(this.last_selection["selectionStart"]-new_pos); - length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"]); - //length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, char_left); - this.area_select(Math.min(this.last_selection["selectionStart"], new_pos), length); - }else{ - this.area_select(new_pos+char_left, 0); - } - - }else{ - view="top"; - for(line_nb=0; line_nb< Math.min(this.last_selection["line_start"]+nbLineToScroll-1, lines.length, lines.length); line_nb++){ - if(line_nb==this.last_selection["line_start"]-1) - char_left= this.last_selection["selectionStart"] -new_pos; - new_pos+= lines[line_nb].length + 1; - } - if(shift_pressed){ - length=Math.abs(this.last_selection["selectionEnd"]-new_pos-char_left); - length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, this.last_selection["curr_pos"])- char_left-1; - //length+=Math.min(lines[Math.min(lines.length-1, line_nb)].length, char_left); - this.area_select(Math.min(this.last_selection["selectionEnd"], new_pos+char_left), length); - if(new_pos+char_left > this.last_selection["selectionEnd"]) - view="bottom"; - }else{ - this.area_select(new_pos+char_left, 0); - } - - } - } - //console.log( new_pos, char_left, length, nbLineToScroll, toScrollAmount, _$("result").clientHeigh ); - this.check_line_selection(); - this.scroll_to_view(view); - }; - - EditArea.prototype.start_resize= function(e){ - parent.editAreaLoader.resize["id"] = editArea.id; - parent.editAreaLoader.resize["start_x"] = (e)? e.pageX : event.x + document.body.scrollLeft; - parent.editAreaLoader.resize["start_y"] = (e)? e.pageY : event.y + document.body.scrollTop; - if(editArea.isIE) - { - editArea.textarea.focus(); - editArea.getIESelection(); - } - parent.editAreaLoader.resize["selectionStart"] = editArea.textarea.selectionStart; - parent.editAreaLoader.resize["selectionEnd"] = editArea.textarea.selectionEnd; - parent.editAreaLoader.start_resize_area(); - }; - - EditArea.prototype.toggle_full_screen= function(to){ - var t=this, p=parent, a=t.textarea, html, frame, selStart, selEnd, old, icon; - if(typeof(to)=="undefined") - to= !t.fullscreen['isFull']; - old = t.fullscreen['isFull']; - t.fullscreen['isFull']= to; - icon = _$("fullscreen"); - selStart = t.textarea.selectionStart; - selEnd = t.textarea.selectionEnd; - html = p.document.getElementsByTagName("html")[0]; - frame = p.document.getElementById("frame_"+t.id); - - if(to && to!=old) - { // toogle on fullscreen - - t.fullscreen['old_overflow'] = p.get_css_property(html, "overflow"); - t.fullscreen['old_height'] = p.get_css_property(html, "height"); - t.fullscreen['old_width'] = p.get_css_property(html, "width"); - t.fullscreen['old_scrollTop'] = html.scrollTop; - t.fullscreen['old_scrollLeft'] = html.scrollLeft; - t.fullscreen['old_zIndex'] = p.get_css_property(frame, "z-index"); - if(t.isOpera){ - html.style.height = "100%"; - html.style.width = "100%"; - } - html.style.overflow = "hidden"; - html.scrollTop = 0; - html.scrollLeft = 0; - - frame.style.position = "absolute"; - frame.style.width = html.clientWidth+"px"; - frame.style.height = html.clientHeight+"px"; - frame.style.display = "block"; - frame.style.zIndex = "999999"; - frame.style.top = "0px"; - frame.style.left = "0px"; - - // if the iframe was in a div with position absolute, the top and left are the one of the div, - // so I fix it by seeing at witch position the iframe start and correcting it - frame.style.top = "-"+p.calculeOffsetTop(frame)+"px"; - frame.style.left = "-"+p.calculeOffsetLeft(frame)+"px"; - - // parent.editAreaLoader.execCommand(t.id, "update_size();"); - // var body=parent.document.getElementsByTagName("body")[0]; - // body.appendChild(frame); - - t.switchClassSticky(icon, 'editAreaButtonSelected', false); - t.fullscreen['allow_resize']= t.resize_allowed; - t.allow_resize(false); - - //t.area_select(selStart, selEnd-selStart); - - - // opera can't manage to do a direct size update - if(t.isFirefox){ - p.editAreaLoader.execCommand(t.id, "update_size();"); - t.area_select(selStart, selEnd-selStart); - t.scroll_to_view(); - t.focus(); - }else{ - setTimeout("parent.editAreaLoader.execCommand('"+ t.id +"', 'update_size();');editArea.focus();", 10); - } - - - } - else if(to!=old) - { // toogle off fullscreen - frame.style.position="static"; - frame.style.zIndex= t.fullscreen['old_zIndex']; - - if(t.isOpera) - { - html.style.height = "auto"; - html.style.width = "auto"; - html.style.overflow = "auto"; - } - else if(t.isIE && p!=top) - { // IE doesn't manage html overflow in frames like in normal page... - html.style.overflow = "auto"; - } - else - { - html.style.overflow = t.fullscreen['old_overflow']; - } - html.scrollTop = t.fullscreen['old_scrollTop']; - html.scrollLeft = t.fullscreen['old_scrollLeft']; - - p.editAreaLoader.hide(t.id); - p.editAreaLoader.show(t.id); - - t.switchClassSticky(icon, 'editAreaButtonNormal', false); - if(t.fullscreen['allow_resize']) - t.allow_resize(t.fullscreen['allow_resize']); - if(t.isFirefox){ - t.area_select(selStart, selEnd-selStart); - setTimeout("editArea.scroll_to_view();", 10); - } - - //p.editAreaLoader.remove_event(p.window, "resize", editArea.update_size); - } - - }; - - EditArea.prototype.allow_resize= function(allow){ - var resize= _$("resize_area"); - if(allow){ - - resize.style.visibility="visible"; - parent.editAreaLoader.add_event(resize, "mouseup", editArea.start_resize); - }else{ - resize.style.visibility="hidden"; - parent.editAreaLoader.remove_event(resize, "mouseup", editArea.start_resize); - } - this.resize_allowed= allow; - }; - - - EditArea.prototype.change_syntax= function(new_syntax, is_waiting){ - // alert("cahnge to "+new_syntax); - // the syntax is the same - if(new_syntax==this.settings['syntax']) - return true; - - // check that the syntax is one allowed - var founded= false; - for(var i=0; i"; - elem.innerHTML= "*"+ this.files[id]['title'] + close +""; - _$('tab_browsing_list').appendChild(elem); - var elem= document.createElement('text'); - this.update_size(); - } - - // open file callback (for plugin) - if(id!="") - this.execCommand('file_open', this.files[id]); - - this.switch_to_file(id, true); - return true; - } - else - return false; - }; - - // close the given file - EditArea.prototype.close_file= function(id){ - if(this.files[id]) - { - this.save_file(id); - - // close file callback - if(this.execCommand('file_close', this.files[id])!==false) - { - // remove the tab in the toolbar - var li= _$(this.files[id]['html_id']); - li.parentNode.removeChild(li); - // select a new file - if(id== this.curr_file) - { - var next_file= ""; - var is_next= false; - for(var i in this.files) - { - if( is_next ) - { - next_file = i; - break; - } - else if( i == id ) - is_next = true; - else - next_file = i; - } - // display the next file - this.switch_to_file(next_file); - } - // clear datas - delete (this.files[id]); - this.update_size(); - } - } - }; - - // backup current file datas - EditArea.prototype.save_file= function(id){ - var t= this, save, a_links, a_selects, save_butt, img, i; - if(t.files[id]) - { - var save= t.files[id]; - save['last_selection'] = t.last_selection; - save['last_text_to_highlight'] = t.last_text_to_highlight; - save['last_hightlighted_text'] = t.last_hightlighted_text; - save['previous'] = t.previous; - save['next'] = t.next; - save['last_undo'] = t.last_undo; - save['smooth_selection'] = t.smooth_selection; - save['do_highlight'] = t.do_highlight; - save['syntax'] = t.settings['syntax']; - save['text'] = t.textarea.value; - save['scroll_top'] = t.result.scrollTop; - save['scroll_left'] = t.result.scrollLeft; - save['selection_start'] = t.last_selection["selectionStart"]; - save['selection_end'] = t.last_selection["selectionEnd"]; - save['font_size'] = t.settings["font_size"]; - save['font_family'] = t.settings["font_family"]; - save['word_wrap'] = t.settings["word_wrap"]; - save['toolbar'] = {'links':{}, 'selects': {}}; - - // save toolbar buttons state for fileSpecific buttons - a_links= _$("toolbar_1").getElementsByTagName("a"); - for( i=0; i