Changeset 30 for Dev/trunk/classes
- Timestamp:
- 07/21/11 15:11:57 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Dev/trunk/classes/SurveyCreationTool.php
r29 r30 16 16 $this->timeStamp = $timeStamp; 17 17 18 SurveyCreationTool::javascript(); 18 if( isset($this->survey->id)) 19 SurveyCreationTool::javascript($this->survey->id); 20 else 21 SurveyCreationTool::javascript(); 19 22 ?> 20 23 … … 30 33 } 31 34 32 private static function javascript( ) {35 private static function javascript($id = null) { 33 36 ?> 34 37 <script type="text/javascript"> 35 38 /* autosave every 3 minutes */ 36 setTimeout("save()", 180000); 37 38 var questionCount = 1; 39 40 function getNewQuestion() 41 { 42 43 var questionDiv = document.createElement("div"); 44 var htmlStr = 45 "<div id='question" + questionCount + "' class='question'>" + 46 "<table class='questionTable'>" + 47 "<th>Question " + questionCount + "</th>" + 48 "<tr><td><label for='questionTitle'>Title</label></td>" + 49 "<td><input type='text' class='questionTitle' name='questionTitle" + questionCount + "' onfocus='handleFocus(this)' size='30' value='' /></td></tr>" + 50 "<tr><td><label for='questionDescription'>Description</label></td>" + 51 "<td><input type='text' class='questionDescription' name='questionDescription" + questionCount + "' onfocus='handleFocus(this)' size='60' value='Write a question description here.' /></td>" + 52 "<tr><td><label for='questionType'>Answer type</label></td>" + 53 "<td><select id='" + questionCount + "' name='questionType" + questionCount + "' onchange='handleType(this)'><br />"+ 54 "<option value='text' selected='selected'>Text</option>" + 55 "<option value='int'>Integer</option>" + 56 "<option value='mc'>Multiple choice</option>" + 57 "<option value='checkboxes'>Checkboxes</option>" + 58 "<option value='scale'>Scale</option>" + 59 "</select></td></tr>" + 60 "</table>" + 61 "<div id='answersDiv" + questionCount + "' class='answersDiv'></div>" + 62 "</div>"; 39 setTimeout("save('<?php echo $id; ?>')", 180000); 40 41 var questionCount = 1; 42 43 function getNewQuestion(title, description) 44 { 45 if (title != null) 46 var title = title; 47 else 48 var title = 'Untitled Question'; 49 50 if (description != null) 51 var description = description; 52 else 53 var description = 'Write a question description here.'; 54 55 var questionDiv = document.createElement("div"); 56 var htmlStr = 57 "<div id='question" + questionCount + "' class='question'>" + 58 "<table class='questionTable'>" + 59 "<th>Question " + questionCount + "</th>" + 60 "<tr><td><label for='questionTitle'>Title</label></td>" + 61 "<td><input type='text' class='questionTitle' name='questionTitle" + questionCount + "' onfocus='handleFocus(this)' size='30' value='" + title + "' /></td></tr>" + 62 "<tr><td><label for='questionDescription'>Description</label></td>" + 63 "<td><input type='text' class='questionDescription' name='questionDescription" + questionCount + "' onfocus='handleFocus(this)' size='60' value='" + description + "' /></td>" + 64 "<tr><td><label for='questionType'>Answer type</label></td>" + 65 "<td><select id='" + questionCount + "' name='questionType" + questionCount + "' onchange='handleType(this)'><br />"+ 66 "<option value='text' selected='selected'>Text</option>" + 67 "<option value='int'>Integer</option>" + 68 "<option value='mc'>Multiple choice</option>" + 69 "<option value='checkboxes'>Checkboxes</option>" + 70 "<option value='scale'>Scale</option>" + 71 "</select></td></tr>" + 72 "</table>" + 73 "<div id='answersDiv" + questionCount + "' class='answersDiv'></div>" + 74 "</div>"; 75 76 questionDiv.innerHTML = htmlStr; 77 78 return questionDiv; 79 } 80 81 function handleFocus(input) 82 { 83 if (input.clicked == null) 84 { 85 input.value = ""; 86 input.style.color = "black"; 87 input.clicked = true; 88 } 89 } 90 91 function handleBlur(input) 92 { 93 var surveyTitle = document.getElementById('surveyTitle'); 94 var surveyDescription = document.getElementById('surveyDescription'); 95 96 if (input.value == "") 97 { 98 input.style.color = "gray"; 99 input.clicked = null; 100 101 if (input == surveyTitle) 102 { 103 input.value = "Untitled Survey"; 104 } 105 else if (input == surveyDescription) 106 { 107 input.value = "Write a helpful description for this survey here."; 108 } 109 } 110 } 111 112 function handleType(select) 113 { 114 var type = select.valueOf().value; 115 var answersDiv = document.getElementById("answersDiv" + select.id); 116 answersDiv.answerCount = 1; 117 answersDiv.clicked = null; 118 119 switch (type) { 120 case 'mc': 121 answersDiv.innerHTML = ""; 122 addOption(select.id); 63 123 64 questionDiv.innerHTML = htmlStr; 65 66 return questionDiv; 67 } 68 69 function handleFocus(input) 70 { 71 if (input.clicked == null) 72 { 73 input.value = ""; 74 input.style.color = "black"; 75 input.clicked = true; 76 } 77 } 78 79 function handleBlur(input) 80 { 81 var surveyTitle = document.getElementById('surveyTitle'); 82 var surveyDescription = document.getElementById('surveyDescription'); 83 84 if (input.value == "") 85 { 86 input.style.color = "gray"; 87 input.clicked = null; 88 89 if (input == surveyTitle) 90 { 91 input.value = "Untitled Survey"; 92 } 93 else if (input == surveyDescription) 94 { 95 input.value = "Write a helpful description for this survey here."; 96 } 97 } 98 } 124 break; 125 case 'text': 126 answersDiv.innerHTML = ""; 127 break; 128 case 'int': 129 answersDiv.innerHTML = ""; 130 //min max 131 minMax(select.id); 132 break; 133 case 'checkboxes': 134 answersDiv.innerHTML = ""; 135 addOption(select.id); 136 break; 137 case 'scale': 138 answersDiv.innerHTML = ""; 139 //what scale (min max incr) 140 minMaxIncr(select.id); 141 break; 142 default: 143 break; 144 } 145 146 } 147 99 148 100 function handleType(select) 101 { 102 var type = select.valueOf().value; 103 var answersDiv = document.getElementById("answersDiv" + select.id); 104 answersDiv.answerCount = 1; 105 answersDiv.clicked = null; 106 107 switch (type) { 108 case 'mc': 109 answersDiv.innerHTML = ""; 110 addOption(select.id); 111 112 break; 113 case 'text': 114 answersDiv.innerHTML = ""; 115 break; 116 case 'int': 117 answersDiv.innerHTML = ""; 118 //min max 119 minMax(select.id); 120 break; 121 case 'checkboxes': 122 answersDiv.innerHTML = ""; 123 addOption(select.id); 124 break; 125 case 'scale': 126 answersDiv.innerHTML = ""; 127 //what scale (min max incr) 128 minMaxIncr(select.id); 129 break; 130 default: 131 break; 132 } 133 134 } 135 136 137 function addOption(questionNumber) 138 { 139 var answersDiv = document.getElementById("answersDiv" + questionNumber); 140 var answerCount = answersDiv.answerCount; 141 var answerDiv = document.createElement("div"); 142 answerDiv.className = "answerDiv"; 149 function addOption(questionNumber) 150 { 151 var answersDiv = document.getElementById("answersDiv" + questionNumber); 152 var answerCount = answersDiv.answerCount; 153 var answerDiv = document.createElement("div"); 154 answerDiv.className = "answerDiv"; 155 156 var htmlStr = "<input type='text' name='q" + 157 questionNumber + "ans" + answerCount + "' value='Option " + answerCount + "' />"; 143 158 144 var htmlStr = "<input type='text' name='q" + 145 questionNumber + "ans" + answerCount + "' value='Option " + answerCount + "' />"; 146 147 if (answersDiv.clicked == null) 148 { 149 htmlStr += "<input type='button' id='addOpt'" 150 + " class='surveyButton' onclick='addOption(" + questionNumber + ")' value='Add Option' />" + 151 "<input type='button' class='surveyButton' onclick='removeOption(" + questionNumber + ")' value='x' />"; 152 153 answersDiv.clicked = true; 154 } 155 156 answerDiv.innerHTML = htmlStr; 157 158 answerDiv.prev = answersDiv.lastAnswer; //singly linked list 159 answersDiv.lastAnswer = answerDiv; 160 161 answersDiv.appendChild(answerDiv); 162 answersDiv.answerCount++; 163 } 164 165 function removeOption(questionNumber) 166 { 167 var answersDiv = document.getElementById("answersDiv" + questionNumber); 168 169 if (answersDiv.lastAnswer.prev != null) 170 { 171 answersDiv.removeChild(answersDiv.lastAnswer); 172 answersDiv.lastAnswer = answersDiv.lastAnswer.prev; 173 answersDiv.answerCount--; 174 } 175 } 159 if (answersDiv.clicked == null) 160 { 161 htmlStr += "<input type='button' id='addOpt'" 162 + " class='surveyButton' onclick='addOption(" + questionNumber + ")' value='Add Option' />" + 163 "<input type='button' class='surveyButton' onclick='removeOption(" + questionNumber + ")' value='x' />"; 164 165 answersDiv.clicked = true; 166 } 167 168 answerDiv.innerHTML = htmlStr; 169 170 answerDiv.prev = answersDiv.lastAnswer; //singly linked list 171 answersDiv.lastAnswer = answerDiv; 172 173 answersDiv.appendChild(answerDiv); 174 answersDiv.answerCount++; 175 } 176 176 177 function minMax(questionNumber)178 {179 var answersDiv = document.getElementById("answersDiv" + questionNumber);177 function removeOption(questionNumber) 178 { 179 var answersDiv = document.getElementById("answersDiv" + questionNumber); 180 180 181 var answerDiv = document.createElement("div"); 182 183 answerDiv.className = "answerDiv"; 184 answerDiv.innerHTML = "<label for='min'>Min</label><input type='text' name='q" + questionNumber + "ans1' />" + 185 "<label for='max'>Max</label><input type='text' name='q" + questionNumber + "ans2' />"; 186 187 answersDiv.appendChild(answerDiv); 188 } 189 190 function minMaxIncr(questionNumber) 191 { 192 var answersDiv = document.getElementById("answersDiv" + questionNumber); 193 194 var answerDiv = document.createElement("div"); 195 answerDiv.className = "answerDiv"; 196 answerDiv.innerHTML = "<label>Left label</label><input type='text' name='q" + questionNumber + "ans1' />" + 197 "<label>Right label</label><input type='text' name='q" + questionNumber + "ans2' />" + 198 "<label>Scale count</label><input type='text' name='q" + questionNumber + "ans3' />" + 199 "<div id='inputCheckFeedback'" + questionNumber + ""; 200 201 answersDiv.appendChild(answerDiv); 202 } 203 204 205 function addQuestion(title, description) 206 { 207 var questionsDiv = document.getElementById('questionsDiv'); 208 var newQuestion = getNewQuestion(title, description); 181 if (answersDiv.lastAnswer.prev != null) 182 { 183 answersDiv.removeChild(answersDiv.lastAnswer); 184 answersDiv.lastAnswer = answersDiv.lastAnswer.prev; 185 answersDiv.answerCount--; 186 } 187 } 188 189 function minMax(questionNumber) 190 { 191 var answersDiv = document.getElementById("answersDiv" + questionNumber); 192 193 var answerDiv = document.createElement("div"); 209 194 210 211 newQuestion.prev = document.lastQuestion; 212 document.lastQuestion = newQuestion; 213 214 questionsDiv.appendChild(newQuestion); 215 questionCount++; 216 } 217 218 function removeLastQuestion() 219 { 220 var questionsDiv = document.getElementById('questionsDiv'); 221 222 if (document.lastQuestion.prev != null) 223 { 224 questionsDiv.removeChild(document.lastQuestion); 225 document.lastQuestion = document.lastQuestion.prev; 226 questionCount--; 227 } 228 else 229 { 230 // do nothing 231 } 232 } 233 234 function save(surveyID) 235 { 236 var form = document.getElementById('survey'); 237 var questionsDiv = document.getElementById('questionsDiv'); 238 form.action = "surveycreation.php"; 239 240 /* extra time stamp */ 241 var date = new Date(); 242 var minutes = date.getUTCMinutes(); 243 if (minutes < 10) 244 minutes = "0" + minutes; 245 var timeStamp = date.getHours() + ":" + minutes; 246 var timeStampInput = document.createElement("input"); 247 timeStampInput.name = "timeStamp"; 248 timeStampInput.value = timeStamp; 249 timeStampInput.type = "hidden"; 250 251 var surveyIDInput = document.createElement("input"); 252 surveyIDInput.name = "surveyID"; 253 surveyIDInput.value = surveyID; 254 surveyIDInput.type = "hidden"; 255 256 questionsDiv.appendChild(timeStampInput); 257 questionsDiv.appendChild(surveyIDInput); 258 form.submit(); 259 } 260 261 195 answerDiv.className = "answerDiv"; 196 answerDiv.innerHTML = "<label for='min'>Min</label><input type='text' name='q" + questionNumber + "ans1' />" + 197 "<label for='max'>Max</label><input type='text' name='q" + questionNumber + "ans2' />"; 198 199 answersDiv.appendChild(answerDiv); 200 } 201 202 function minMaxIncr(questionNumber) 203 { 204 var answersDiv = document.getElementById("answersDiv" + questionNumber); 205 206 var answerDiv = document.createElement("div"); 207 answerDiv.className = "answerDiv"; 208 answerDiv.innerHTML = "<label>Left label</label><input type='text' name='q" + questionNumber + "ans1' />" + 209 "<label>Right label</label><input type='text' name='q" + questionNumber + "ans2' />" + 210 "<label>Scale count</label><input type='text' name='q" + questionNumber + "ans3' />" + 211 "<div id='inputCheckFeedback'" + questionNumber + ""; 212 213 answersDiv.appendChild(answerDiv); 214 } 215 216 217 function addQuestion(title, description) 218 { 219 var questionsDiv = document.getElementById('questionsDiv'); 220 var newQuestion = getNewQuestion(title, description); 221 222 223 newQuestion.prev = document.lastQuestion; 224 document.lastQuestion = newQuestion; 225 226 questionsDiv.appendChild(newQuestion); 227 questionCount++; 228 } 229 230 function removeLastQuestion() 231 { 232 var questionsDiv = document.getElementById('questionsDiv'); 233 234 if (document.lastQuestion.prev != null) 235 { 236 questionsDiv.removeChild(document.lastQuestion); 237 document.lastQuestion = document.lastQuestion.prev; 238 questionCount--; 239 } 240 else 241 { 242 // do nothing 243 } 244 } 245 246 function save(surveyID) 247 { 248 var form = document.getElementById('survey'); 249 var questionsDiv = document.getElementById('questionsDiv'); 250 form.action = "surveycreation.php"; 251 252 /* extra time stamp */ 253 var date = new Date(); 254 var minutes = date.getUTCMinutes(); 255 if (minutes < 10) 256 minutes = "0" + minutes; 257 var timeStamp = date.getHours() + ":" + minutes; 258 var timeStampInput = document.createElement("input"); 259 timeStampInput.name = "timeStamp"; 260 timeStampInput.value = timeStamp; 261 timeStampInput.type = "hidden"; 262 263 var surveyIDInput = document.createElement("input"); 264 surveyIDInput.name = "surveyID"; 265 surveyIDInput.value = surveyID; 266 surveyIDInput.type = "hidden"; 267 268 questionsDiv.appendChild(timeStampInput); 269 questionsDiv.appendChild(surveyIDInput); 270 form.submit(); 271 } 272 273 262 274 </script> 263 275 <?php … … 310 322 <div id='questionsDiv'> 311 323 </div> 312 313 <script type="text/javascript"> addQuestion(); </script> 314 <?php 324 <?php 325 if (isset($this->survey)) { 326 foreach ($this->survey->questions as $question) { 327 ?> 328 <script type="text/javascript"> addQuestion('<?php echo $question->title; ?>', '<?php echo $question->description; ?>'); 329 </script> 330 <?php 331 } 332 } else { 333 ?> 334 <script type="text/javascript"> addQuestion();</script> 335 <?php 336 } 315 337 } 316 338
Note: See TracChangeset
for help on using the changeset viewer.