Difference between revisions of "Team:Cambridge-JIC/Make Your Own"

Line 48: Line 48:
 
             }
 
             }
 
         </style>
 
         </style>
         <script>
+
         <script src="//2015.igem.org/Team:Cambridge-JIC/Make_Your_Own_js?action=raw&ctype=text/javascript"></script>
            quiz = function(elem){
+
                this.elem = $(elem);
+
                this.steps = [];
+
 
+
                this.step = function(question, answers) {
+
                    this.question = question;
+
                    this.answers = {};
+
                    this.bind = function(target, keys) {
+
                        if (typeof keys === "undefined") {
+
                            keys = Object.keys(this.answers);
+
                        }
+
 
+
                        for (var i=0; i<keys.length; i++) {
+
                            key = keys[i];
+
                            this.answers[key].target = target;
+
                        }
+
                    };
+
                    this.elem = function(quiz, index) {
+
                        elem = $('<div class="cam-quiz-question">');
+
                        elem.append($('<h3>').text(this.question));
+
                        for (key in this.answers) {
+
                            elem.append($('<div class="cam-quiz-answer">')
+
                                .text(this.answers[key].answer)
+
                                .data("key", key)
+
                                .data("step", this)
+
                                .data("quiz", quiz)
+
                                .data("index", index)
+
                                .click(function(){
+
                                    key = $(this).data("key");
+
                                    step = $(this).data("step");
+
                                    quiz = $(this).data("quiz");
+
                                    index = $(this).data("index");
+
                                    ref = quiz.steps[index];
+
                                    ref.elem.find('.cam-quiz-selected').removeClass('cam-quiz-selected');
+
                                    $(this).addClass('cam-quiz-selected');
+
 
+
                                    for (var i=quiz.steps.length; --i>index;) {
+
                                        quiz.steps[i].elem.remove();
+
                                        quiz.steps.pop();
+
                                    }
+
 
+
                                    quiz.steps[index].option = key;
+
                                    nstep = step.answers[key].target;
+
                                    switch (typeof nstep) {
+
                                        case "object":
+
                                            var nindex = quiz.steps.length;
+
                                            var nref = {
+
                                                'step': nstep,
+
                                                'elem': nstep.elem(quiz, nindex),
+
                                                'option': undefined
+
                                            };
+
                                            quiz.steps.push(nref);
+
                                            quiz.elem.append(nref.elem);
+
                                            break;
+
                                        case "function":
+
                                            options = [];
+
                                            for (var i=0; i<quiz.steps.length; i++) {
+
                                                options.push(quiz.steps[i].option);
+
                                            }
+
                                            var nref = {
+
                                                'step': undefined,
+
                                                'elem': $('<div class="cam-quiz-result">')
+
                                                    .append(nstep(options)),
+
                                                'option': undefined
+
                                            };
+
                                            quiz.steps.push(nref);
+
                                            quiz.elem.append(nref.elem);
+
                                            break;
+
                                        default:
+
                                            alert("Quiz error! Please contact the site maintainers....");
+
                                            break;
+
                                    }
+
                                }));
+
                        }
+
                        return elem;
+
                    };
+
 
+
                    for (key in answers) {
+
                        answer = answers[key];
+
                        this.answers[key] = {
+
                            'answer': answer,
+
                            'target': undefined
+
                        };
+
                    }
+
                };
+
 
+
                this.start = function(step) {
+
                    index = this.steps.length;
+
                    ref = {
+
                        'step': step,
+
                        'elem': step.elem(this, index),
+
                        'option': undefined
+
                    };
+
                    this.steps.push(ref);
+
                    this.elem.append(ref.elem);
+
                };
+
            };
+
 
+
            $(document).ready(function(){
+
                q = new quiz('#cam-quiz');
+
 
+
                step0 = new q.step("Tell us which options you'd like for your microscope.", {
+
                    1: "Okay!"
+
                });
+
                step1 = new q.step("Besides bright-field, do you need dark-field imaging?", {
+
                    0: "Yes",
+
                    1: "No"
+
                });
+
                step2 = new q.step("Do you need to image GFP fluorescence?", {
+
                    0: "Yes",
+
                    1: "No"
+
                });
+
                step3 = new q.step("Do you need to image RFP fluorescence?", {
+
                    0: "Yes",
+
                    1: "No"
+
                });
+
                step4 = new q.step("Do you need to image other fluorescent proteins, e.g. YFP?", {
+
                    0: "Yes",
+
                    1: "No"
+
                });
+
                step5 = new q.step("Do you want your microscope to be manual, motorised, or will you need to swap between both?", {
+
                    0: "Manual only",
+
                    1: "Motorised only",
+
                    2: "Both",
+
                });
+
                step6 = new q.step("Do you need your microscope to be fully battery-powered, e.g. for fieldwork?", {
+
                    0: "Yes",
+
                    1: "No"
+
                });
+
 
+
final = function(options) {
+
      window.location.href="#CC0";
+
      ret = '<h3>Thanks!</h3><br/><table><tr><th>Number</th><th>Part</th><th>Cost (GBP)</th><th>STL file</th><th>SCAD file</th></tr><tr><td>1</td><td>main stage</td></tr><tr><td>3</td><td>legs</td></tr><tr><td>2</td><td>side supports for z axis</td></tr><tr><td>1</td><td>z axis in 3 parts (vertical + horizontal + connector)</td></tr><tr><td>1</td><td>connecting ring bw z axes</td></tr><tr><td>1</td><td>3-legged camera holder</td></tr><tr><td>1</td><td>bright-field cube</td></tr><tr><td>2</td><td>slide clips</td></tr>'
+
      if(options[2] == 0 && options[3] == 0 && options[4] == 0) {
+
          ret += '<tr><td>3</td><td>epicubes</td></tr>'
+
      }
+
      else if((options[2] == 0 && options[3] == 0) || (options[2] == 0 && options[4] == 0) || (options[3] == 0 && options[4] == 0)) {
+
          ret += '<tr><td>2</td><td>epicubes</td></tr>'
+
      } else if(options[2] == 0 || options[3] == 0 || options[4] == 0) {
+
          ret += '<tr><td>jsjdjd</td><td>2</td></tr>'
+
      }
+
      ret += '</table>'
+
      return $('<div>').html(ret)
+
}
+
 
+
                step0.bind(step1, [1]);
+
 
+
                step1.bind(step2, [0]);
+
                step1.bind(step2, [1]);
+
 
+
                step2.bind(step3, [0]);
+
                step2.bind(step3, [1]);
+
 
+
                step3.bind(step4, [0]);
+
                step3.bind(step4, [1]);
+
 
+
                step4.bind(step5, [0]);
+
                step4.bind(step5, [1]);
+
 
+
                step5.bind(step6, [0]);
+
                step5.bind(step6, [1]);
+
                step5.bind(step6, [2]);
+
 
+
                step6.bind(final, [0]);
+
                step6.bind(final, [1]);
+
+
                q.start(step0);
+
            });
+
 
+
        </script>
+
  
 
     <section style="background:white">
 
     <section style="background:white">

Revision as of 17:10, 14 September 2015

Make Your Own

If you want to make your very own OpenScope, this is the page for you!

OpenScope is a modular microscope: you can use it in manual mode, or you can add motors for finer control. It is very easy to swap between manual and motorized modes.

You can also use bright-field imaging only, or extend the microscope to include fluorescence imaging or dark-field imaging.

It is also possible to make the microscope fully battery-powered (ideal for fieldwork!).