virtualcommons-svn Mailing List for Virtual Commons Experiment Software (Page 5)
Status: Beta
Brought to you by:
alllee
You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(21) |
Aug
(31) |
Sep
(6) |
Oct
(15) |
Nov
(2) |
Dec
(9) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(4) |
Feb
(6) |
Mar
(12) |
Apr
(52) |
May
(14) |
Jun
(19) |
Jul
(81) |
Aug
(115) |
Sep
(36) |
Oct
(88) |
Nov
(46) |
Dec
(58) |
2010 |
Jan
(52) |
Feb
(55) |
Mar
(48) |
Apr
(15) |
May
(5) |
Jun
(38) |
Jul
(27) |
Aug
(24) |
Sep
(28) |
Oct
(1) |
Nov
(2) |
Dec
(29) |
2011 |
Jan
(87) |
Feb
(39) |
Mar
(63) |
Apr
(42) |
May
(26) |
Jun
(53) |
Jul
(23) |
Aug
(43) |
Sep
(37) |
Oct
(25) |
Nov
(4) |
Dec
(7) |
2012 |
Jan
(73) |
Feb
(79) |
Mar
(62) |
Apr
(28) |
May
(12) |
Jun
(2) |
Jul
(9) |
Aug
(1) |
Sep
(8) |
Oct
|
Nov
(3) |
Dec
(3) |
2013 |
Jan
(8) |
Feb
(16) |
Mar
(38) |
Apr
(74) |
May
(62) |
Jun
(15) |
Jul
(49) |
Aug
(19) |
Sep
(9) |
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(25) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <com...@bi...> - 2013-07-05 23:02:54
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/8d18dfa33725/ Changeset: 8d18dfa33725 User: alllee Date: 2013-07-06 01:02:49 Summary: exposing experiment metadata and configurations as KO view models Affected #: 3 files diff -r a39b82baecf660fc700d87ae0948786bd2ab3646 -r 8d18dfa337252f71d737114f0b0acceb88a10b55 vcweb/core/models.py --- a/vcweb/core/models.py +++ b/vcweb/core/models.py @@ -133,12 +133,13 @@ class ExperimentMetadata(models.Model): """ - An ExperimentMetadata record represents the *type* of a given implemented Experiment, e.g., **Forestry** or - **Irrigation**. This shouldn't be confused with a **Forestry** or **Irrigation** Experiment instance, which - represents a concrete experiment run, with a specific configuration, experimenter, etc. Each experiment app - should define and add a single ExperimentMetadata record for the experiment type that it represents. You can - register an ExperimentMetadata object by creating a JSON/YAML/SQL representation of it in your app/fixtures - directory (e.g., irrigation/fixtures/irrigation.json) and then invoking ``python manage.py loaddata irrigation``. + An ExperimentMetadata record represents the *type* of a given implemented Experiment, e.g., **forestry**, **lighter + footprints**, **boundary effects**, or **irrigation**. This shouldn't be confused with a specific instance of a + **forestry** or ** lighter footprints ** experiment, which represents a concrete experiment run, with a specific + configuration, experimenter, etc. Each experiment metadata app should define and add a single ExperimentMetadata + record for the experiment type that it represents. You can register an ExperimentMetadata object by creating a + JSON/YAML/SQL representation of it in your app/fixtures directory (e.g., irrigation/fixtures/irrigation.json) and + then invoking ``python manage.py loaddata irrigation``. """ title = models.CharField(max_length=255) # the URL fragment that this experiment_metadata will occupy, @@ -155,6 +156,18 @@ objects = ExperimentMetadataManager() + def to_dict(self, include_configurations=False, **kwargs): + data = { + 'title': self.title, + 'namespace': self.namespace, + 'date_created': self.date_created, + 'description': self.description, + } + if include_configurations: + configurations = [ec.to_dict() for ec in ExperimentConfiguration.objects.filter(experiment_metadata=self)] + data['configurations'] = configurations + return data + def natural_key(self): return [self.namespace] @@ -291,6 +304,18 @@ return self.experiment_metadata.namespace + def to_dict(self, **kwargs): + return { + 'name': self.name, + 'treatment_id': self.treatment_id, + 'date_created': self.date_created.strftime("%m-%d-%Y %H:%M"), + 'creator': self.creator, + 'max_group_size': self.max_group_size, + 'is_experimenter_driven': self.is_experimenter_driven, + 'number_of_rounds': self.final_sequence_number, + } + + def serialize(self, output_format='xml', **kwargs): if self.round_configuration_set.count() > 0: all_objects = [] diff -r a39b82baecf660fc700d87ae0948786bd2ab3646 -r 8d18dfa337252f71d737114f0b0acceb88a10b55 vcweb/core/templates/experimenter/dashboard.html --- a/vcweb/core/templates/experimenter/dashboard.html +++ b/vcweb/core/templates/experimenter/dashboard.html @@ -15,14 +15,14 @@ Experiment metadata objects go here <div data-bind='foreach: experimentMetadataList'><h3 data-bind='text: title'></h3> - <div data-bind='foreach: experimentConfigurationList'> + <div data-bind='foreach: configurations'><div class='alert alert-message'> - <h4><span data-bind='text: name'>configuration name</span> (Treatment <span data-bind='text: treatment_id'></span>) <span class='pull-right' data-bind='text: date_created'>date created</span></h4> - description? number of rounds? max group size? is experimenter driven? + <h4><span data-bind='text: name'>configuration name</span> (treatment id: <span data-bind='text: treatment_id() || "None"'></span>) <span class='pull-right' data-bind='text: date_created'></span></h4> + <span data-bind='text: number_of_rounds'></span> rounds, groups of <span data-bind='text: max_group_size'></span><br><div class='btn-group'> - <a class='btn' data-bind='click: createNewExperiment'><i class='icon-plus-sign'></i> new</a> - <a class='btn' data-bind='click: modify'><i class='icon-edit'></i> edit</a> + <a class='btn' data-bind='click: $root.createNewExperiment'><i class='icon-plus-sign'></i> new</a> + <a class='btn' data-bind='click: $root.modify'><i class='icon-edit'></i> edit</a></div></div> @@ -76,7 +76,21 @@ {% block javascript %} {{ block.super }} <script type='text/javascript'> + var dashboardViewModelJson = $.parseJSON("{{ dashboardViewModelJson|escapejs }}"); $(function() { + function DashboardViewModel(dashboardViewModelJson) { + var self = this; + var model = ko.mapping.fromJS(dashboardViewModelJson); + model.createNewExperiment = function() { + console.debug("create new experiment from configuration"); + } + model.modify = function() { + console.debug("modify existing configuration"); + } + return model; + } + var model = new DashboardViewModel(dashboardViewModelJson); + ko.applyBindings(model); $('a.confirm-experiment-action').on("click", function(evt) { evt.preventDefault(); var self = $(this); diff -r a39b82baecf660fc700d87ae0948786bd2ab3646 -r 8d18dfa337252f71d737114f0b0acceb88a10b55 vcweb/core/views.py --- a/vcweb/core/views.py +++ b/vcweb/core/views.py @@ -87,6 +87,27 @@ else: return [ 'participant/dashboard.html' ] + def get_experimenter_dashboard_view_model(self, experimenter): + experiment_metadata_list = [] + for em in ExperimentMetadata.objects.all(): + data = em.to_dict(include_configurations=True) + experiment_metadata_list.append(data) + logger.debug("experiment metadata list: %s", experiment_metadata_list) + data = { + 'experimentMetadataList': experiment_metadata_list + } + + return dumps(data) + + + def get_context_data(self, **kwargs): + context = super(Dashboard, self).get_context_data(**kwargs) + user = self.request.user + if is_experimenter(user): + experimenter = user.experimenter + context['dashboardViewModelJson'] = self.get_experimenter_dashboard_view_model(experimenter) + return context + def get_queryset(self): user = self.request.user if is_experimenter(user): Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-07-02 22:49:40
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/a39b82baecf6/ Changeset: a39b82baecf6 User: alllee Date: 2013-07-03 00:49:38 Summary: preliminary work on experimenter dashboard refactor Affected #: 4 files diff -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e -r a39b82baecf660fc700d87ae0948786bd2ab3646 vcweb/core/ajax.py --- a/vcweb/core/ajax.py +++ b/vcweb/core/ajax.py @@ -2,12 +2,13 @@ from django.shortcuts import get_object_or_404 from django.template.loader_tags import BlockNode, ExtendsNode from django.template import loader, Context, RequestContext -from django.utils.html import escape from vcweb.core import dumps from vcweb.core.decorators import experimenter_required, dajaxice_register +from vcweb.core.forms import BookmarkExperimentMetadataForm from vcweb.core.http import JsonResponse -from vcweb.core.models import Experiment, RoundData, get_chat_message_parameter +from vcweb.core.models import (Experiment, RoundData, ExperimentMetadata, BookmarkedExperimentMetadata, + get_chat_message_parameter, ) import logging logger = logging.getLogger(__name__) @@ -88,6 +89,25 @@ @experimenter_required @dajaxice_register +def bookmark_experiment_metadata(request): + form = BookmarkExperimentMetadataForm(request.POST or None) + try: + if form.is_valid(): + experiment_metadata_id = form.cleaned_data.get('experiment_metadata_id') + experimenter_id = form.cleaned_data.get('experimenter_id') + experimenter = request.user.experimenter + if experimenter.pk == experimenter_id: + experiment_metadata = get_object_or_404(ExperimentMetadata, pk=experiment_metadata_id) + bem = BookmarkedExperimentMetadata.objects.get_or_create(experimenter=experimenter, + experiment_metadata=experiment_metadata) + return JsonResponse(dumps({'success': True})) + except: + logger.debug("invalid bookmark experiment metadata request: %s", request) + + return JsonResponse(dumps({'success': False})) + +@experimenter_required +@dajaxice_register def save_experimenter_notes(request, experiment_id, notes=None): experiment = _get_experiment(request, experiment_id) current_round_data = experiment.current_round_data diff -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e -r a39b82baecf660fc700d87ae0948786bd2ab3646 vcweb/core/forms.py --- a/vcweb/core/forms.py +++ b/vcweb/core/forms.py @@ -161,6 +161,10 @@ heading = forms.FloatField(required=False) speed = forms.FloatField(required=False) +class BookmarkExperimentMetadataForm(forms.Form): + experiment_metadata_id = forms.IntegerField() + experimenter_id = forms.IntegerField() + class ExperimentActionForm(forms.Form): action = forms.CharField(max_length=64) experiment_id = forms.IntegerField(widget=forms.HiddenInput) diff -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e -r a39b82baecf660fc700d87ae0948786bd2ab3646 vcweb/core/models.py --- a/vcweb/core/models.py +++ b/vcweb/core/models.py @@ -226,6 +226,15 @@ class Meta: ordering = ['user'] +class BookmarkedExperimentMetadata(models.Model): + experimenter = models.ForeignKey(Experimenter, related_name='bookmarked_experiment_metadata_set') + experiment_metadata = models.ForeignKey(ExperimentMetadata, related_name='bookmarked_experiment_metadata_set') + date_created = models.DateTimeField(default=datetime.now) + + class Meta: + unique_together = (('experimenter', 'experiment_metadata'),) + ordering = ['experimenter', 'experiment_metadata'] + class ExperimenterRequest(models.Model): """ a request for this user to be an experimenter, should notify admins diff -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e -r a39b82baecf660fc700d87ae0948786bd2ab3646 vcweb/core/templates/experimenter/dashboard.html --- a/vcweb/core/templates/experimenter/dashboard.html +++ b/vcweb/core/templates/experimenter/dashboard.html @@ -2,8 +2,42 @@ {% block title %}Virtual Commons Web Experimenter Dashboard{% endblock %} {% block page %} {{ block.super }} -<h3>Experimenter Dashboard</h3> +<h2>Experimenter Dashboard</h2> {% comment %} FIXME: UI refinement needed as the list of experiments grows {% endcomment %} +<div id='dashboard'> + <ul class='nav nav-tabs'> + <li class='active'><a href='#start' data-toggle='tab'><i class='icon-beaker'></i> Start a new experiment</a></li> + <li><a href='#manage' data-toggle='tab'><i class='icon-wrench'></i> Manage running experiments</a></li> + <li><a href='#archived' data-toggle='tab'><i class='icon-archive'></i> Archived experiments</a></li> + </ul> + <div class='tab-content'> + <div class='tab-pane active' id='start'> + Experiment metadata objects go here + <div data-bind='foreach: experimentMetadataList'> + <h3 data-bind='text: title'></h3> + <div data-bind='foreach: experimentConfigurationList'> + <div class='alert alert-message'> + <h4><span data-bind='text: name'>configuration name</span> (Treatment <span data-bind='text: treatment_id'></span>) <span class='pull-right' data-bind='text: date_created'>date created</span></h4> + description? number of rounds? max group size? is experimenter driven? + <br> + <div class='btn-group'> + <a class='btn' data-bind='click: createNewExperiment'><i class='icon-plus-sign'></i> new</a> + <a class='btn' data-bind='click: modify'><i class='icon-edit'></i> edit</a> + </div> + </div> + + </div> + </div> + </div> + <div class='tab-pane' id='manage'> + Manage experiments here + </div> + <div class='tab-pane' id='archived'> + Archived experiments go here + </div> + </div> +</div> +<hr><div id="experiment-list"> {% for e in experiments %} <div class='alert alert-message'> Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: A L. <iss...@bi...> - 2013-07-02 18:16:28
|
New issue 109: forestry revamp for veronika https://bitbucket.org/virtualcommons/vcweb/issue/109/forestry-revamp-for-veronika A Lee: 1. 3 practice rounds 2. 2 treatments: no communication / communication, communication / no communication 3. 10 rounds each 4. 60 second rounds 5. keep instructions the same Responsible: alllee |
From: <com...@bi...> - 2013-07-02 00:15:44
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/41321c0f8beb/ Changeset: 41321c0f8beb User: alllee Date: 2013-07-02 00:44:21 Summary: version bump on bootstrap icons Affected #: 6 files diff -r 3a0c234e441a629b0e4c01046f20e7b4cb7c0e45 -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e vcweb/static/bootstrap/css/font-awesome.min.css --- a/vcweb/static/bootstrap/css/font-awesome.min.css +++ b/vcweb/static/bootstrap/css/font-awesome.min.css @@ -1,24 +1,403 @@ -/*! - * Font Awesome 3.1.0 - * the iconic font designed for Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fontawesome.io - * - * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 License - - * http://creativecommons.org/licenses/by/3.0/ - * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fontawesome.io" - - * Contact - * ------------------------------------------------------- - * Email: da...@fo... - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com - */@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot?v=3.1.0');src:url('../font/fontawesome-webfont.eot?#iefix&v=3.1.0') format('embedded-opentype'),url('../font/fontawesome-webfont.woff?v=3.1.0') format('woff'),url('../font/fontawesome-webfont.ttf?v=3.1.0') format('truetype'),url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.1.0') format('svg');font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}a [class^="icon-"],a [class*=" icon-"],a [class^="icon-"]:before,a [class*=" icon-"]:before{display:inline}[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.2857142857142858em;text-align:center}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.5714285714285714em}ul.icons-ul{list-style-type:none;text-indent:-0.7142857142857143em;margin-left:2.142857142857143em}ul.icons-ul>li .icon-li{width:.7142857142857143em;display:inline-block;text-align:center}[class^="icon-"].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none}.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em}.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em}.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical:before{-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before,.icon-rotate-right:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before,.icon-mail-forward:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before,.icon-rotate-left:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before,.icon-mail-reply:before{content:"\f112"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"} \ No newline at end of file +@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot?v=3.2.1');src:url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'),url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'),url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'),url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');font-weight:normal;font-style:normal;}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;} +[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none;} +.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em;} +a [class^="icon-"],a [class*=" icon-"]{display:inline;} +[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.1428571428571428em;text-align:right;padding-right:0.2857142857142857em;}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.4285714285714286em;} +.icons-ul{margin-left:2.142857142857143em;list-style-type:none;}.icons-ul>li{position:relative;} +.icons-ul .icon-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;text-align:center;line-height:inherit;} +[class^="icon-"].hide,[class*=" icon-"].hide{display:none;} +.icon-muted{color:#eeeeee;} +.icon-light{color:#ffffff;} +.icon-dark{color:#333333;} +.icon-border{border:solid 1px #eeeeee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.icon-2x{font-size:2em;}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.icon-3x{font-size:3em;}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.icon-4x{font-size:4em;}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.icon-5x{font-size:5em;}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;} +.pull-right{float:right;} +.pull-left{float:left;} +[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em;} +[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em;} +[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;} +.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none;} +.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em;} +.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block;} +.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em;} +.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em;} +.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em;} +.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em;} +.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0;}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em;} +.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em;} +.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em;} +.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{line-height:inherit;} +.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%;}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em;} +.icon-stack .icon-stack-base{font-size:2em;*line-height:1em;} +.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;} +a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none;} +@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);} 100%{-moz-transform:rotate(359deg);}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);} 100%{-webkit-transform:rotate(359deg);}}@-o-keyframes spin{0%{-o-transform:rotate(0deg);} 100%{-o-transform:rotate(359deg);}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg);} 100%{-ms-transform:rotate(359deg);}}@keyframes spin{0%{transform:rotate(0deg);} 100%{transform:rotate(359deg);}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);} +.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);} +.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);} +.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1);} +.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1);} +a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block;} +.icon-glass:before{content:"\f000";} +.icon-music:before{content:"\f001";} +.icon-search:before{content:"\f002";} +.icon-envelope-alt:before{content:"\f003";} +.icon-heart:before{content:"\f004";} +.icon-star:before{content:"\f005";} +.icon-star-empty:before{content:"\f006";} +.icon-user:before{content:"\f007";} +.icon-film:before{content:"\f008";} +.icon-th-large:before{content:"\f009";} +.icon-th:before{content:"\f00a";} +.icon-th-list:before{content:"\f00b";} +.icon-ok:before{content:"\f00c";} +.icon-remove:before{content:"\f00d";} +.icon-zoom-in:before{content:"\f00e";} +.icon-zoom-out:before{content:"\f010";} +.icon-power-off:before,.icon-off:before{content:"\f011";} +.icon-signal:before{content:"\f012";} +.icon-gear:before,.icon-cog:before{content:"\f013";} +.icon-trash:before{content:"\f014";} +.icon-home:before{content:"\f015";} +.icon-file-alt:before{content:"\f016";} +.icon-time:before{content:"\f017";} +.icon-road:before{content:"\f018";} +.icon-download-alt:before{content:"\f019";} +.icon-download:before{content:"\f01a";} +.icon-upload:before{content:"\f01b";} +.icon-inbox:before{content:"\f01c";} +.icon-play-circle:before{content:"\f01d";} +.icon-rotate-right:before,.icon-repeat:before{content:"\f01e";} +.icon-refresh:before{content:"\f021";} +.icon-list-alt:before{content:"\f022";} +.icon-lock:before{content:"\f023";} +.icon-flag:before{content:"\f024";} +.icon-headphones:before{content:"\f025";} +.icon-volume-off:before{content:"\f026";} +.icon-volume-down:before{content:"\f027";} +.icon-volume-up:before{content:"\f028";} +.icon-qrcode:before{content:"\f029";} +.icon-barcode:before{content:"\f02a";} +.icon-tag:before{content:"\f02b";} +.icon-tags:before{content:"\f02c";} +.icon-book:before{content:"\f02d";} +.icon-bookmark:before{content:"\f02e";} +.icon-print:before{content:"\f02f";} +.icon-camera:before{content:"\f030";} +.icon-font:before{content:"\f031";} +.icon-bold:before{content:"\f032";} +.icon-italic:before{content:"\f033";} +.icon-text-height:before{content:"\f034";} +.icon-text-width:before{content:"\f035";} +.icon-align-left:before{content:"\f036";} +.icon-align-center:before{content:"\f037";} +.icon-align-right:before{content:"\f038";} +.icon-align-justify:before{content:"\f039";} +.icon-list:before{content:"\f03a";} +.icon-indent-left:before{content:"\f03b";} +.icon-indent-right:before{content:"\f03c";} +.icon-facetime-video:before{content:"\f03d";} +.icon-picture:before{content:"\f03e";} +.icon-pencil:before{content:"\f040";} +.icon-map-marker:before{content:"\f041";} +.icon-adjust:before{content:"\f042";} +.icon-tint:before{content:"\f043";} +.icon-edit:before{content:"\f044";} +.icon-share:before{content:"\f045";} +.icon-check:before{content:"\f046";} +.icon-move:before{content:"\f047";} +.icon-step-backward:before{content:"\f048";} +.icon-fast-backward:before{content:"\f049";} +.icon-backward:before{content:"\f04a";} +.icon-play:before{content:"\f04b";} +.icon-pause:before{content:"\f04c";} +.icon-stop:before{content:"\f04d";} +.icon-forward:before{content:"\f04e";} +.icon-fast-forward:before{content:"\f050";} +.icon-step-forward:before{content:"\f051";} +.icon-eject:before{content:"\f052";} +.icon-chevron-left:before{content:"\f053";} +.icon-chevron-right:before{content:"\f054";} +.icon-plus-sign:before{content:"\f055";} +.icon-minus-sign:before{content:"\f056";} +.icon-remove-sign:before{content:"\f057";} +.icon-ok-sign:before{content:"\f058";} +.icon-question-sign:before{content:"\f059";} +.icon-info-sign:before{content:"\f05a";} +.icon-screenshot:before{content:"\f05b";} +.icon-remove-circle:before{content:"\f05c";} +.icon-ok-circle:before{content:"\f05d";} +.icon-ban-circle:before{content:"\f05e";} +.icon-arrow-left:before{content:"\f060";} +.icon-arrow-right:before{content:"\f061";} +.icon-arrow-up:before{content:"\f062";} +.icon-arrow-down:before{content:"\f063";} +.icon-mail-forward:before,.icon-share-alt:before{content:"\f064";} +.icon-resize-full:before{content:"\f065";} +.icon-resize-small:before{content:"\f066";} +.icon-plus:before{content:"\f067";} +.icon-minus:before{content:"\f068";} +.icon-asterisk:before{content:"\f069";} +.icon-exclamation-sign:before{content:"\f06a";} +.icon-gift:before{content:"\f06b";} +.icon-leaf:before{content:"\f06c";} +.icon-fire:before{content:"\f06d";} +.icon-eye-open:before{content:"\f06e";} +.icon-eye-close:before{content:"\f070";} +.icon-warning-sign:before{content:"\f071";} +.icon-plane:before{content:"\f072";} +.icon-calendar:before{content:"\f073";} +.icon-random:before{content:"\f074";} +.icon-comment:before{content:"\f075";} +.icon-magnet:before{content:"\f076";} +.icon-chevron-up:before{content:"\f077";} +.icon-chevron-down:before{content:"\f078";} +.icon-retweet:before{content:"\f079";} +.icon-shopping-cart:before{content:"\f07a";} +.icon-folder-close:before{content:"\f07b";} +.icon-folder-open:before{content:"\f07c";} +.icon-resize-vertical:before{content:"\f07d";} +.icon-resize-horizontal:before{content:"\f07e";} +.icon-bar-chart:before{content:"\f080";} +.icon-twitter-sign:before{content:"\f081";} +.icon-facebook-sign:before{content:"\f082";} +.icon-camera-retro:before{content:"\f083";} +.icon-key:before{content:"\f084";} +.icon-gears:before,.icon-cogs:before{content:"\f085";} +.icon-comments:before{content:"\f086";} +.icon-thumbs-up-alt:before{content:"\f087";} +.icon-thumbs-down-alt:before{content:"\f088";} +.icon-star-half:before{content:"\f089";} +.icon-heart-empty:before{content:"\f08a";} +.icon-signout:before{content:"\f08b";} +.icon-linkedin-sign:before{content:"\f08c";} +.icon-pushpin:before{content:"\f08d";} +.icon-external-link:before{content:"\f08e";} +.icon-signin:before{content:"\f090";} +.icon-trophy:before{content:"\f091";} +.icon-github-sign:before{content:"\f092";} +.icon-upload-alt:before{content:"\f093";} +.icon-lemon:before{content:"\f094";} +.icon-phone:before{content:"\f095";} +.icon-unchecked:before,.icon-check-empty:before{content:"\f096";} +.icon-bookmark-empty:before{content:"\f097";} +.icon-phone-sign:before{content:"\f098";} +.icon-twitter:before{content:"\f099";} +.icon-facebook:before{content:"\f09a";} +.icon-github:before{content:"\f09b";} +.icon-unlock:before{content:"\f09c";} +.icon-credit-card:before{content:"\f09d";} +.icon-rss:before{content:"\f09e";} +.icon-hdd:before{content:"\f0a0";} +.icon-bullhorn:before{content:"\f0a1";} +.icon-bell:before{content:"\f0a2";} +.icon-certificate:before{content:"\f0a3";} +.icon-hand-right:before{content:"\f0a4";} +.icon-hand-left:before{content:"\f0a5";} +.icon-hand-up:before{content:"\f0a6";} +.icon-hand-down:before{content:"\f0a7";} +.icon-circle-arrow-left:before{content:"\f0a8";} +.icon-circle-arrow-right:before{content:"\f0a9";} +.icon-circle-arrow-up:before{content:"\f0aa";} +.icon-circle-arrow-down:before{content:"\f0ab";} +.icon-globe:before{content:"\f0ac";} +.icon-wrench:before{content:"\f0ad";} +.icon-tasks:before{content:"\f0ae";} +.icon-filter:before{content:"\f0b0";} +.icon-briefcase:before{content:"\f0b1";} +.icon-fullscreen:before{content:"\f0b2";} +.icon-group:before{content:"\f0c0";} +.icon-link:before{content:"\f0c1";} +.icon-cloud:before{content:"\f0c2";} +.icon-beaker:before{content:"\f0c3";} +.icon-cut:before{content:"\f0c4";} +.icon-copy:before{content:"\f0c5";} +.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6";} +.icon-save:before{content:"\f0c7";} +.icon-sign-blank:before{content:"\f0c8";} +.icon-reorder:before{content:"\f0c9";} +.icon-list-ul:before{content:"\f0ca";} +.icon-list-ol:before{content:"\f0cb";} +.icon-strikethrough:before{content:"\f0cc";} +.icon-underline:before{content:"\f0cd";} +.icon-table:before{content:"\f0ce";} +.icon-magic:before{content:"\f0d0";} +.icon-truck:before{content:"\f0d1";} +.icon-pinterest:before{content:"\f0d2";} +.icon-pinterest-sign:before{content:"\f0d3";} +.icon-google-plus-sign:before{content:"\f0d4";} +.icon-google-plus:before{content:"\f0d5";} +.icon-money:before{content:"\f0d6";} +.icon-caret-down:before{content:"\f0d7";} +.icon-caret-up:before{content:"\f0d8";} +.icon-caret-left:before{content:"\f0d9";} +.icon-caret-right:before{content:"\f0da";} +.icon-columns:before{content:"\f0db";} +.icon-sort:before{content:"\f0dc";} +.icon-sort-down:before{content:"\f0dd";} +.icon-sort-up:before{content:"\f0de";} +.icon-envelope:before{content:"\f0e0";} +.icon-linkedin:before{content:"\f0e1";} +.icon-rotate-left:before,.icon-undo:before{content:"\f0e2";} +.icon-legal:before{content:"\f0e3";} +.icon-dashboard:before{content:"\f0e4";} +.icon-comment-alt:before{content:"\f0e5";} +.icon-comments-alt:before{content:"\f0e6";} +.icon-bolt:before{content:"\f0e7";} +.icon-sitemap:before{content:"\f0e8";} +.icon-umbrella:before{content:"\f0e9";} +.icon-paste:before{content:"\f0ea";} +.icon-lightbulb:before{content:"\f0eb";} +.icon-exchange:before{content:"\f0ec";} +.icon-cloud-download:before{content:"\f0ed";} +.icon-cloud-upload:before{content:"\f0ee";} +.icon-user-md:before{content:"\f0f0";} +.icon-stethoscope:before{content:"\f0f1";} +.icon-suitcase:before{content:"\f0f2";} +.icon-bell-alt:before{content:"\f0f3";} +.icon-coffee:before{content:"\f0f4";} +.icon-food:before{content:"\f0f5";} +.icon-file-text-alt:before{content:"\f0f6";} +.icon-building:before{content:"\f0f7";} +.icon-hospital:before{content:"\f0f8";} +.icon-ambulance:before{content:"\f0f9";} +.icon-medkit:before{content:"\f0fa";} +.icon-fighter-jet:before{content:"\f0fb";} +.icon-beer:before{content:"\f0fc";} +.icon-h-sign:before{content:"\f0fd";} +.icon-plus-sign-alt:before{content:"\f0fe";} +.icon-double-angle-left:before{content:"\f100";} +.icon-double-angle-right:before{content:"\f101";} +.icon-double-angle-up:before{content:"\f102";} +.icon-double-angle-down:before{content:"\f103";} +.icon-angle-left:before{content:"\f104";} +.icon-angle-right:before{content:"\f105";} +.icon-angle-up:before{content:"\f106";} +.icon-angle-down:before{content:"\f107";} +.icon-desktop:before{content:"\f108";} +.icon-laptop:before{content:"\f109";} +.icon-tablet:before{content:"\f10a";} +.icon-mobile-phone:before{content:"\f10b";} +.icon-circle-blank:before{content:"\f10c";} +.icon-quote-left:before{content:"\f10d";} +.icon-quote-right:before{content:"\f10e";} +.icon-spinner:before{content:"\f110";} +.icon-circle:before{content:"\f111";} +.icon-mail-reply:before,.icon-reply:before{content:"\f112";} +.icon-github-alt:before{content:"\f113";} +.icon-folder-close-alt:before{content:"\f114";} +.icon-folder-open-alt:before{content:"\f115";} +.icon-expand-alt:before{content:"\f116";} +.icon-collapse-alt:before{content:"\f117";} +.icon-smile:before{content:"\f118";} +.icon-frown:before{content:"\f119";} +.icon-meh:before{content:"\f11a";} +.icon-gamepad:before{content:"\f11b";} +.icon-keyboard:before{content:"\f11c";} +.icon-flag-alt:before{content:"\f11d";} +.icon-flag-checkered:before{content:"\f11e";} +.icon-terminal:before{content:"\f120";} +.icon-code:before{content:"\f121";} +.icon-reply-all:before{content:"\f122";} +.icon-mail-reply-all:before{content:"\f122";} +.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123";} +.icon-location-arrow:before{content:"\f124";} +.icon-crop:before{content:"\f125";} +.icon-code-fork:before{content:"\f126";} +.icon-unlink:before{content:"\f127";} +.icon-question:before{content:"\f128";} +.icon-info:before{content:"\f129";} +.icon-exclamation:before{content:"\f12a";} +.icon-superscript:before{content:"\f12b";} +.icon-subscript:before{content:"\f12c";} +.icon-eraser:before{content:"\f12d";} +.icon-puzzle-piece:before{content:"\f12e";} +.icon-microphone:before{content:"\f130";} +.icon-microphone-off:before{content:"\f131";} +.icon-shield:before{content:"\f132";} +.icon-calendar-empty:before{content:"\f133";} +.icon-fire-extinguisher:before{content:"\f134";} +.icon-rocket:before{content:"\f135";} +.icon-maxcdn:before{content:"\f136";} +.icon-chevron-sign-left:before{content:"\f137";} +.icon-chevron-sign-right:before{content:"\f138";} +.icon-chevron-sign-up:before{content:"\f139";} +.icon-chevron-sign-down:before{content:"\f13a";} +.icon-html5:before{content:"\f13b";} +.icon-css3:before{content:"\f13c";} +.icon-anchor:before{content:"\f13d";} +.icon-unlock-alt:before{content:"\f13e";} +.icon-bullseye:before{content:"\f140";} +.icon-ellipsis-horizontal:before{content:"\f141";} +.icon-ellipsis-vertical:before{content:"\f142";} +.icon-rss-sign:before{content:"\f143";} +.icon-play-sign:before{content:"\f144";} +.icon-ticket:before{content:"\f145";} +.icon-minus-sign-alt:before{content:"\f146";} +.icon-check-minus:before{content:"\f147";} +.icon-level-up:before{content:"\f148";} +.icon-level-down:before{content:"\f149";} +.icon-check-sign:before{content:"\f14a";} +.icon-edit-sign:before{content:"\f14b";} +.icon-external-link-sign:before{content:"\f14c";} +.icon-share-sign:before{content:"\f14d";} +.icon-compass:before{content:"\f14e";} +.icon-collapse:before{content:"\f150";} +.icon-collapse-top:before{content:"\f151";} +.icon-expand:before{content:"\f152";} +.icon-euro:before,.icon-eur:before{content:"\f153";} +.icon-gbp:before{content:"\f154";} +.icon-dollar:before,.icon-usd:before{content:"\f155";} +.icon-rupee:before,.icon-inr:before{content:"\f156";} +.icon-yen:before,.icon-jpy:before{content:"\f157";} +.icon-renminbi:before,.icon-cny:before{content:"\f158";} +.icon-won:before,.icon-krw:before{content:"\f159";} +.icon-bitcoin:before,.icon-btc:before{content:"\f15a";} +.icon-file:before{content:"\f15b";} +.icon-file-text:before{content:"\f15c";} +.icon-sort-by-alphabet:before{content:"\f15d";} +.icon-sort-by-alphabet-alt:before{content:"\f15e";} +.icon-sort-by-attributes:before{content:"\f160";} +.icon-sort-by-attributes-alt:before{content:"\f161";} +.icon-sort-by-order:before{content:"\f162";} +.icon-sort-by-order-alt:before{content:"\f163";} +.icon-thumbs-up:before{content:"\f164";} +.icon-thumbs-down:before{content:"\f165";} +.icon-youtube-sign:before{content:"\f166";} +.icon-youtube:before{content:"\f167";} +.icon-xing:before{content:"\f168";} +.icon-xing-sign:before{content:"\f169";} +.icon-youtube-play:before{content:"\f16a";} +.icon-dropbox:before{content:"\f16b";} +.icon-stackexchange:before{content:"\f16c";} +.icon-instagram:before{content:"\f16d";} +.icon-flickr:before{content:"\f16e";} +.icon-adn:before{content:"\f170";} +.icon-bitbucket:before{content:"\f171";} +.icon-bitbucket-sign:before{content:"\f172";} +.icon-tumblr:before{content:"\f173";} +.icon-tumblr-sign:before{content:"\f174";} +.icon-long-arrow-down:before{content:"\f175";} +.icon-long-arrow-up:before{content:"\f176";} +.icon-long-arrow-left:before{content:"\f177";} +.icon-long-arrow-right:before{content:"\f178";} +.icon-apple:before{content:"\f179";} +.icon-windows:before{content:"\f17a";} +.icon-android:before{content:"\f17b";} +.icon-linux:before{content:"\f17c";} +.icon-dribbble:before{content:"\f17d";} +.icon-skype:before{content:"\f17e";} +.icon-foursquare:before{content:"\f180";} +.icon-trello:before{content:"\f181";} +.icon-female:before{content:"\f182";} +.icon-male:before{content:"\f183";} +.icon-gittip:before{content:"\f184";} +.icon-sun:before{content:"\f185";} +.icon-moon:before{content:"\f186";} +.icon-archive:before{content:"\f187";} +.icon-bug:before{content:"\f188";} +.icon-vk:before{content:"\f189";} +.icon-weibo:before{content:"\f18a";} +.icon-renren:before{content:"\f18b";} diff -r 3a0c234e441a629b0e4c01046f20e7b4cb7c0e45 -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e vcweb/static/bootstrap/font/FontAwesome.otf Binary file vcweb/static/bootstrap/font/FontAwesome.otf has changed diff -r 3a0c234e441a629b0e4c01046f20e7b4cb7c0e45 -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e vcweb/static/bootstrap/font/fontawesome-webfont.eot Binary file vcweb/static/bootstrap/font/fontawesome-webfont.eot has changed diff -r 3a0c234e441a629b0e4c01046f20e7b4cb7c0e45 -r 41321c0f8beb53b7ae79e573a0190fe5e867de5e vcweb/static/bootstrap/font/fontawesome-webfont.svg --- a/vcweb/static/bootstrap/font/fontawesome-webfont.svg +++ b/vcweb/static/bootstrap/font/fontawesome-webfont.svg @@ -52,8 +52,8 @@ <glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /><glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /><glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h299l-299 299v-299zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544q40 0 88 -20t76 -48l408 -408q28 -28 48 -76t20 -88z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM1024 640q26 0 45 -19t19 -45v-96q0 -26 -19 -45t-45 -19h-416q-26 0 -45 19t-19 45v480q0 26 19 45t45 19h96q26 0 45 -19t19 -45v-320h256z" /> +<glyph unicode="" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " /> +<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /><glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /><glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /><glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> @@ -63,7 +63,7 @@ <glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /><glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /><glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /> -<glyph unicode="" horiz-adv-x="1152" d="M704 512q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5q0 -37 19 -67t51 -47l-69 -229q-5 -15 5 -28t26 -13h192q16 0 26 13t5 28l-69 229q32 17 51 47t19 67zM320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68 t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /><glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /><glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /><glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> @@ -138,7 +138,7 @@ <glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /><glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " /><glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-225 -225l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-195 -195l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l195 195l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l224 224q76 76 172 108t148 -12z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /><glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /><glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /><glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> @@ -178,7 +178,7 @@ <glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /><glyph unicode="" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" /><glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M704 160q0 6 -15 57t-35 115.5t-20 65.5q32 16 51 47t19 67q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5q0 -36 19 -66.5t51 -47.5q0 -2 -20 -66t-35 -115t-15 -57q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1664 960v-256q0 -26 -19 -45t-45 -19 h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" /><glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /><glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" /><glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5... [truncated message content] |
From: <com...@bi...> - 2013-06-28 20:30:07
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/3a0c234e441a/ Changeset: 3a0c234e441a User: alllee Date: 2013-06-28 22:29:50 Summary: default for authentication token should be empty string, not null Affected #: 1 file diff -r 5648827ac525dadab517d966672d4c51937eae13 -r 3a0c234e441a629b0e4c01046f20e7b4cb7c0e45 vcweb/core/views.py --- a/vcweb/core/views.py +++ b/vcweb/core/views.py @@ -105,7 +105,7 @@ return experiment_dict -def set_authentication_token(user, authentication_token=None): +def set_authentication_token(user, authentication_token=''): commons_user = None if is_participant(user): commons_user = user.participant Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-28 08:09:02
|
3 new commits in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/d540fac49304/ Changeset: d540fac49304 User: alllee Date: 2013-06-28 08:09:09 Summary: removing nullable from char and text fields (see https://docs.djangoproject.com/en/dev/ref/models/fields/#null), it was causing issues with session_ids Affected #: 4 files diff -r 5842f4eb8222acdcb3c470477164b06b1a8b1e79 -r d540fac49304a238a80021e9e55c7e4b6f73e66f vcweb/core/fixtures/initial_data.json --- a/vcweb/core/fixtures/initial_data.json +++ b/vcweb/core/fixtures/initial_data.json @@ -5,7 +5,7 @@ "fields": { "url": "http://www.asu.edu/", "name": "Arizona State University", - "description": null, + "description": "", "date_created": "2010-07-29 21:37:37", "last_modified": "2010-07-29 23:37:23" } diff -r 5842f4eb8222acdcb3c470477164b06b1a8b1e79 -r d540fac49304a238a80021e9e55c7e4b6f73e66f vcweb/core/migrations/0007_convert_null_to_empty_string.py --- /dev/null +++ b/vcweb/core/migrations/0007_convert_null_to_empty_string.py @@ -0,0 +1,447 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models +from django.db.models import Q + +def convert_to_empty_string(model_class, *attributes): + for attribute in attributes: + none_dict = { attribute: None } + empty_string_dict = { attribute: '' } + model_class.objects.filter(**none_dict).update(**empty_string_dict) + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + # Note: Don't use "from appname.models import ModelName". + # Use orm.ModelName to refer to models in this application, + # and orm['appname.ModelName'] for models in other applications. + GroupClusterDataValue = orm['core.GroupClusterDataValue'] + convert_to_empty_string(GroupClusterDataValue,'string_value') + + GroupRoundDataValue = orm['core.GroupRoundDataValue'] + convert_to_empty_string(GroupRoundDataValue,'string_value') + + Institution = orm['core.Institution'] + convert_to_empty_string(Institution,'description') + + Experimenter = orm['core.Experimenter'] + convert_to_empty_string(Experimenter, 'authentication_token') + + Parameter = orm['core.Parameter'] + convert_to_empty_string(Parameter, 'display_name', 'description', 'class_name', 'default_value_string', 'enum_choices') + + ParticipantExperimentRelationship = orm['core.ParticipantExperimentRelationship'] + convert_to_empty_string(ParticipantExperimentRelationship, 'current_location', 'additional_data') + + Group = orm['core.Group'] + convert_to_empty_string(Group, 'session_id') + + convert_to_empty_string(orm['core.RoundConfiguration'], 'debriefing', 'template_filename', 'session_id', 'template_id', 'instructions') + + convert_to_empty_string(orm['core.ExperimentSession'], 'invitation_text') + + convert_to_empty_string(orm['core.RoundParameterValue'], 'string_value') + + convert_to_empty_string(orm['core.ParticipantRoundDataValue'], 'string_value') + + convert_to_empty_string(orm['core.Participant'], 'authentication_token') + + convert_to_empty_string(orm['core.ExperimentMetadata'], 'description') + + convert_to_empty_string(orm['core.Experiment'], 'tick_duration', 'duration') + + convert_to_empty_string(orm['core.ExperimentParameterValue'], 'string_value') + + convert_to_empty_string(orm['core.GroupCluster'], 'session_id', 'name') + + convert_to_empty_string(orm['core.ExperimentConfiguration'], 'invitation_text', 'treatment_id', 'invitation_subject') + + convert_to_empty_string(orm['core.RoundData'], 'experimenter_notes') + + def backwards(self, orm): + "Write your backwards methods here." + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'core.activitylog': { + 'Meta': {'object_name': 'ActivityLog'}, + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'log_message': ('django.db.models.fields.TextField', [], {}) + }, + u'core.address': { + 'Meta': {'object_name': 'Address'}, + 'city': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + 'street1': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'street2': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'zipcode': ('django.db.models.fields.CharField', [], {'max_length': '8', 'blank': 'True'}) + }, + u'core.chatmessage': { + 'Meta': {'ordering': "['-date_created']", 'object_name': 'ChatMessage', '_ormbases': [u'core.ParticipantRoundDataValue']}, + u'participantrounddatavalue_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ParticipantRoundDataValue']", 'unique': 'True', 'primary_key': 'True'}), + 'target_participant': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'target_participant_chat_message_set'", 'null': 'True', 'to': u"orm['core.ParticipantGroupRelationship']"}) + }, + u'core.comment': { + 'Meta': {'ordering': "['-date_created']", 'object_name': 'Comment', '_ormbases': [u'core.ParticipantRoundDataValue']}, + u'participantrounddatavalue_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ParticipantRoundDataValue']", 'unique': 'True', 'primary_key': 'True'}) + }, + u'core.experiment': { + 'Meta': {'ordering': "['date_created', 'status']", 'object_name': 'Experiment'}, + 'amqp_exchange_name': ('django.db.models.fields.CharField', [], {'default': "'vcweb.default.exchange'", 'max_length': '64'}), + 'authentication_code': ('django.db.models.fields.CharField', [], {'default': "'vcweb.auth.code'", 'max_length': '32'}), + 'current_repeated_round_sequence_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'current_round_sequence_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'current_round_start_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_activated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'duration': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}), + 'experiment_configuration': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.ExperimentConfiguration']"}), + 'experiment_metadata': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.ExperimentMetadata']"}), + 'experimenter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Experimenter']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'INACTIVE'", 'max_length': '32'}), + 'tick_duration': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}) + }, + u'core.experimentactivitylog': { + 'Meta': {'object_name': 'ExperimentActivityLog', '_ormbases': [u'core.ActivityLog']}, + u'activitylog_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ActivityLog']", 'unique': 'True', 'primary_key': 'True'}), + 'experiment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_log_set'", 'to': u"orm['core.Experiment']"}), + 'round_configuration': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.RoundConfiguration']"}) + }, + u'core.experimentconfiguration': { + 'Meta': {'ordering': "['experiment_metadata', 'creator', 'date_created']", 'object_name': 'ExperimentConfiguration'}, + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experiment_configuration_set'", 'to': u"orm['core.Experimenter']"}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'exchange_rate': ('django.db.models.fields.DecimalField', [], {'default': '0.2', 'null': 'True', 'max_digits': '6', 'decimal_places': '2', 'blank': 'True'}), + 'experiment_metadata': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experiment_configuration_set'", 'to': u"orm['core.ExperimentMetadata']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'invitation_subject': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'invitation_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'is_experimenter_driven': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'max_group_size': ('django.db.models.fields.PositiveIntegerField', [], {'default': '5'}), + 'max_number_of_participants': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'treatment_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}) + }, + u'core.experimenter': { + 'Meta': {'ordering': "['user']", 'object_name': 'Experimenter'}, + 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'authentication_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'failed_password_attempts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'institution': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Institution']", 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'experimenter'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + u'core.experimenterrequest': { + 'Meta': {'object_name': 'ExperimenterRequest'}, + 'approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'}) + }, + u'core.experimentmetadata': { + 'Meta': {'ordering': "['namespace', 'date_created']", 'object_name': 'ExperimentMetadata'}, + 'about_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'default_configuration': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.ExperimentConfiguration']", 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'logo_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'namespace': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'short_name': ('django.db.models.fields.SlugField', [], {'max_length': '32', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'core.experimentparametervalue': { + 'Meta': {'object_name': 'ExperimentParameterValue'}, + 'boolean_value': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'experiment_configuration': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parameter_value_set'", 'to': u"orm['core.ExperimentConfiguration']"}), + 'float_value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'int_value': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'parameter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Parameter']"}), + 'string_value': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + }, + u'core.experimentsession': { + 'Meta': {'object_name': 'ExperimentSession'}, + 'capacity': ('django.db.models.fields.PositiveIntegerField', [], {'default': '20'}), + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experiment_session_set'", 'to': u"orm['auth.User']"}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'experiment_metadata': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experiment_session_set'", 'to': u"orm['core.ExperimentMetadata']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'invitation_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'scheduled_date': ('django.db.models.fields.DateTimeField', [], {}), + 'scheduled_end_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + u'core.group': { + 'Meta': {'ordering': "['experiment', 'number']", 'object_name': 'Group'}, + 'experiment': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Experiment']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'max_size': ('django.db.models.fields.PositiveIntegerField', [], {'default': '5'}), + 'number': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'session_id': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}) + }, + u'core.groupactivitylog': { + 'Meta': {'object_name': 'GroupActivityLog', '_ormbases': [u'core.ActivityLog']}, + u'activitylog_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ActivityLog']", 'unique': 'True', 'primary_key': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_log_set'", 'to': u"orm['core.Group']"}), + 'round_configuration': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.RoundConfiguration']"}) + }, + u'core.groupcluster': { + 'Meta': {'ordering': "['date_created']", 'object_name': 'GroupCluster'}, + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'experiment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'group_cluster_set'", 'to': u"orm['core.Experiment']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'session_id': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}) + }, + u'core.groupclusterdatavalue': { + 'Meta': {'object_name': 'GroupClusterDataValue'}, + 'boolean_value': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'float_value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'group_cluster': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data_value_set'", 'to': u"orm['core.GroupCluster']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'int_value': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'parameter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Parameter']"}), + 'round_data': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'group_cluster_data_value_set'", 'to': u"orm['core.RoundData']"}), + 'string_value': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + }, + u'core.grouprelationship': { + 'Meta': {'ordering': "['date_created']", 'object_name': 'GroupRelationship'}, + 'cluster': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'group_relationship_set'", 'to': u"orm['core.GroupCluster']"}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'core.grouprounddatavalue': { + 'Meta': {'ordering': "['round_data', 'group', 'parameter']", 'object_name': 'GroupRoundDataValue'}, + 'boolean_value': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'float_value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data_value_set'", 'to': u"orm['core.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'int_value': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'parameter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Parameter']"}), + 'round_data': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'group_data_value_set'", 'to': u"orm['core.RoundData']"}), + 'string_value': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + }, + u'core.institution': { + 'Meta': {'object_name': 'Institution'}, + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + }, + u'core.invitation': { + 'Meta': {'object_name': 'Invitation'}, + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'experiment_session': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.ExperimentSession']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'participant': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Participant']"}), + 'sender': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + u'core.like': { + 'Meta': {'ordering': "['-date_created', 'round_data', 'participant_group_relationship', 'parameter']", 'object_name': 'Like', '_ormbases': [u'core.ParticipantRoundDataValue']}, + u'participantrounddatavalue_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ParticipantRoundDataValue']", 'unique': 'True', 'primary_key': 'True'}) + }, + u'core.parameter': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('name', 'experiment_metadata', 'scope'),)", 'object_name': 'Parameter'}, + 'class_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Experimenter']"}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'default_value_string': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}), + 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'enum_choices': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'experiment_metadata': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.ExperimentMetadata']", 'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_required': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'scope': ('django.db.models.fields.CharField', [], {'default': "'round'", 'max_length': '32'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '32'}) + }, + u'core.participant': { + 'Meta': {'ordering': "['user']", 'object_name': 'Participant'}, + 'address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Address']", 'null': 'True', 'blank': 'True'}), + 'authentication_token': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'birthdate': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'can_receive_invitations': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'experiments': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'participant_set'", 'symmetrical': 'False', 'through': u"orm['core.ParticipantExperimentRelationship']", 'to': u"orm['core.Experiment']"}), + 'failed_password_attempts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'gender': ('django.db.models.fields.CharField', [], {'max_length': '1', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'participant_set'", 'symmetrical': 'False', 'through': u"orm['core.ParticipantGroupRelationship']", 'to': u"orm['core.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'institution': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Institution']", 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'participant'", 'unique': 'True', 'to': u"orm['auth.User']"}) + }, + u'core.participantexperimentrelationship': { + 'Meta': {'object_name': 'ParticipantExperimentRelationship'}, + 'additional_data': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}), + 'current_location': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'experiment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'participant_relationship_set'", 'to': u"orm['core.Experiment']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_completed_round_sequence_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'participant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'experiment_relationship_set'", 'to': u"orm['core.Participant']"}), + 'participant_identifier': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'sequential_participant_identifier': ('django.db.models.fields.PositiveIntegerField', [], {}) + }, + u'core.participantgrouprelationship': { + 'Meta': {'ordering': "['group', 'participant_number']", 'object_name': 'ParticipantGroupRelationship'}, + 'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'first_visit': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'participant_group_relationship_set'", 'to': u"orm['core.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notifications_since': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True', 'blank': 'True'}), + 'participant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'participant_group_relationship_set'", 'to': u"orm['core.Participant']"}), + 'participant_number': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'round_joined': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.RoundConfiguration']"}) + }, + u'core.participantrounddatavalue': { + 'Meta': {'ordering': "['-date_created', 'round_data', 'participant_group_relationship', 'parameter']", 'object_name': 'ParticipantRoundDataValue'}, + 'boolean_value': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'float_value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'int_value': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'parameter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Parameter']"}), + 'participant_group_relationship': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'data_value_set'", 'to': u"orm['core.ParticipantGroupRelationship']"}), + 'round_data': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'participant_data_value_set'", 'to': u"orm['core.RoundData']"}), + 'string_value': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'submitted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'target_data_value': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'target_data_value_set'", 'null': 'True', 'to': u"orm['core.ParticipantRoundDataValue']"}) + }, + u'core.participantsignup': { + 'Meta': {'object_name': 'ParticipantSignup'}, + 'attendance': ('django.db.models.fields.PositiveIntegerField', [], {'max_length': '1', 'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'invitation': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'signup_set'", 'to': u"orm['core.Invitation']"}), + 'participant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'signup_set'", 'to': u"orm['core.Participant']"}) + }, + u'core.quizquestion': { + 'Meta': {'object_name': 'QuizQuestion'}, + 'answer': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'experiment': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'default_quiz_question_set'", 'null': 'True', 'to': u"orm['core.Experiment']"}), + 'explanation': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'input_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'round_configuration': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'quiz_question_set'", 'to': u"orm['core.RoundConfiguration']"}) + }, + u'core.roundconfiguration': { + 'Meta': {'ordering': "['experiment_configuration', 'sequence_number', 'date_created']", 'object_name': 'RoundConfiguration'}, + 'chat_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'create_group_clusters': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'debriefing': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'display_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'duration': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'experiment_configuration': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'round_configuration_set'", 'to': u"orm['core.ExperimentConfiguration']"}), + 'group_cluster_size': ('django.db.models.fields.PositiveIntegerField', [], {'default': '2', 'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'instructions': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'preserve_existing_groups': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'randomize_groups': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'repeat': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'round_type': ('django.db.models.fields.CharField', [], {'default': "'REGULAR'", 'max_length': '32'}), + 'sequence_number': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'session_id': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'survey_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'template_filename': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'template_id': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}) + }, + u'core.rounddata': { + 'Meta': {'ordering': "['round_configuration']", 'unique_together': "(('round_configuration', 'repeating_round_sequence_number', 'experiment'),)", 'object_name': 'RoundData'}, + 'elapsed_time': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'experiment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'round_data_set'", 'to': u"orm['core.Experiment']"}), + 'experimenter_notes': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'repeating_round_sequence_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'round_configuration': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'round_data_set'", 'to': u"orm['core.RoundConfiguration']"}) + }, + u'core.roundparametervalue': { + 'Meta': {'object_name': 'RoundParameterValue'}, + 'boolean_value': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'db_index': 'True'}), + 'float_value': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'int_value': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'parameter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Parameter']"}), + 'round_configuration': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parameter_value_set'", 'to': u"orm['core.RoundConfiguration']"}), + 'string_value': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + }, + u'core.spoolparticipantstatistics': { + 'Meta': {'object_name': 'SpoolParticipantStatistics'}, + 'absences': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'discharges': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'invitations': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'participant': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'spool_statistics_set'", 'to': u"orm['core.Participant']"}), + 'participations': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + } + } + + complete_apps = ['core'] + symmetrical = True diff -r 5842f4eb8222acdcb3c470477164b06b1a8b1e79 -r d540fac49304a238a80021e9e55c7e4b6f73e66f vcweb/core/migrations/0008_auto__chg_field_groupclusterdatavalue_string_value__chg_field_grouprou.py --- /dev/null +++ b/vcweb/core/migrations/0008_auto__chg_field_groupclusterdatavalue_string_value__chg_field_grouprou.py @@ -0,0 +1,579 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'GroupClusterDataValue.string_value' + db.alter_column(u'core_groupclusterdatavalue', 'string_value', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'GroupRoundDataValue.string_value' + db.alter_column(u'core_grouprounddatavalue', 'string_value', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'Institution.description' + db.alter_column(u'core_institution', 'description', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'Experimenter.authentication_token' + db.alter_column(u'core_experimenter', 'authentication_token', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'Parameter.display_name' + db.alter_column(u'core_parameter', 'display_name', self.gf('django.db.models.fields.CharField')(default='', max_length=255)) + + # Changing field 'Parameter.description' + db.alter_column(u'core_parameter', 'description', self.gf('django.db.models.fields.CharField')(default='', max_length=512)) + + # Changing field 'Parameter.class_name' + db.alter_column(u'core_parameter', 'class_name', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'Parameter.default_value_string' + db.alter_column(u'core_parameter', 'default_value_string', self.gf('django.db.models.fields.CharField')(default='', max_length=255)) + + # Changing field 'Parameter.enum_choices' + db.alter_column(u'core_parameter', 'enum_choices', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'ParticipantExperimentRelationship.current_location' + db.alter_column(u'core_participantexperimentrelationship', 'current_location', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'ParticipantExperimentRelationship.additional_data' + db.alter_column(u'core_participantexperimentrelationship', 'additional_data', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'Group.session_id' + db.alter_column(u'core_group', 'session_id', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'RoundConfiguration.debriefing' + db.alter_column(u'core_roundconfiguration', 'debriefing', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'RoundConfiguration.template_filename' + db.alter_column(u'core_roundconfiguration', 'template_filename', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'RoundConfiguration.session_id' + db.alter_column(u'core_roundconfiguration', 'session_id', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'RoundConfiguration.template_id' + db.alter_column(u'core_roundconfiguration', 'template_id', self.gf('django.db.models.fields.CharField')(default='', max_length=128)) + + # Changing field 'RoundConfiguration.instructions' + db.alter_column(u'core_roundconfiguration', 'instructions', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'ExperimentSession.invitation_text' + db.alter_column(u'core_experimentsession', 'invitation_text', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'RoundParameterValue.string_value' + db.alter_column(u'core_roundparametervalue', 'string_value', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'ParticipantRoundDataValue.string_value' + db.alter_column(u'core_participantrounddatavalue', 'string_value', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'Participant.authentication_token' + db.alter_column(u'core_participant', 'authentication_token', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'ExperimentMetadata.description' + db.alter_column(u'core_experimentmetadata', 'description', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'Experiment.tick_duration' + db.alter_column(u'core_experiment', 'tick_duration', self.gf('django.db.models.fields.CharField')(default='', max_length=32)) + + # Changing field 'Experiment.duration' + db.alter_column(u'core_experiment', 'duration', self.gf('django.db.models.fields.CharField')(default='', max_length=32)) + + # Changing field 'ExperimentParameterValue.string_value' + db.alter_column(u'core_experimentparametervalue', 'string_value', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'GroupCluster.session_id' + db.alter_column(u'core_groupcluster', 'session_id', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'GroupCluster.name' + db.alter_column(u'core_groupcluster', 'name', self.gf('django.db.models.fields.CharField')(default='', max_length=64)) + + # Changing field 'ExperimentConfiguration.invitation_text' + db.alter_column(u'core_experimentconfiguration', 'invitation_text', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'ExperimentConfiguration.treatment_id' + db.alter_column(u'core_experimentconfiguration', 'treatment_id', self.gf('django.db.models.fields.CharField')(default='', max_length=32)) + + # Changing field 'ExperimentConfiguration.invitation_subject' + db.alter_column(u'core_experimentconfiguration', 'invitation_subject', self.gf('django.db.models.fields.TextField')(default='')) + + # Changing field 'RoundData.experimenter_notes' + db.alter_column(u'core_rounddata', 'experimenter_notes', self.gf('django.db.models.fields.TextField')(default='')) + + def backwards(self, orm): + + # Changing field 'GroupClusterDataValue.string_value' + db.alter_column(u'core_groupclusterdatavalue', 'string_value', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'GroupRoundDataValue.string_value' + db.alter_column(u'core_grouprounddatavalue', 'string_value', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'Institution.description' + db.alter_column(u'core_institution', 'description', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'Experimenter.authentication_token' + db.alter_column(u'core_experimenter', 'authentication_token', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'Parameter.display_name' + db.alter_column(u'core_parameter', 'display_name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True)) + + # Changing field 'Parameter.description' + db.alter_column(u'core_parameter', 'description', self.gf('django.db.models.fields.CharField')(max_length=512, null=True)) + + # Changing field 'Parameter.class_name' + db.alter_column(u'core_parameter', 'class_name', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'Parameter.default_value_string' + db.alter_column(u'core_parameter', 'default_value_string', self.gf('django.db.models.fields.CharField')(max_length=255, null=True)) + + # Changing field 'Parameter.enum_choices' + db.alter_column(u'core_parameter', 'enum_choices', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'ParticipantExperimentRelationship.current_location' + db.alter_column(u'core_participantexperimentrelationship', 'current_location', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'ParticipantExperimentRelationship.additional_data' + db.alter_column(u'core_participantexperimentrelationship', 'additional_data', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'Group.session_id' + db.alter_column(u'core_group', 'session_id', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'RoundConfiguration.debriefing' + db.alter_column(u'core_roundconfiguration', 'debriefing', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'RoundConfiguration.template_filename' + db.alter_column(u'core_roundconfiguration', 'template_filename', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'RoundConfiguration.session_id' + db.alter_column(u'core_roundconfiguration', 'session_id', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'RoundConfiguration.template_id' + db.alter_column(u'core_roundconfiguration', 'template_id', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)) + + # Changing field 'RoundConfiguration.instructions' + db.alter_column(u'core_roundconfiguration', 'instructions', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'ExperimentSession.invitation_text' + db.alter_column(u'core_experimentsession', 'invitation_text', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'RoundParameterValue.string_value' + db.alter_column(u'core_roundparametervalue', 'string_value', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'ParticipantRoundDataValue.string_value' + db.alter_column(u'core_participantrounddatavalue', 'string_value', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'Participant.authentication_token' + db.alter_column(u'core_participant', 'authentication_token', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'ExperimentMetadata.description' + db.alter_column(u'core_experimentmetadata', 'description', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'Experiment.tick_duration' + db.alter_column(u'core_experiment', 'tick_duration', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)) + + # Changing field 'Experiment.duration' + db.alter_column(u'core_experiment', 'duration', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)) + + # Changing field 'ExperimentParameterValue.string_value' + db.alter_column(u'core_experimentparametervalue', 'string_value', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'GroupCluster.session_id' + db.alter_column(u'core_groupcluster', 'session_id', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'GroupCluster.name' + db.alter_column(u'core_groupcluster', 'name', self.gf('django.db.models.fields.CharField')(max_length=64, null=True)) + + # Changing field 'ExperimentConfiguration.invitation_text' + db.alter_column(u'core_experimentconfiguration', 'invitation_text', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'ExperimentConfiguration.treatment_id' + db.alter_column(u'core_experimentconfiguration', 'treatment_id', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)) + + # Changing field 'ExperimentConfiguration.invitation_subject' + db.alter_column(u'core_experimentconfiguration', 'invitation_subject', self.gf('django.db.models.fields.TextField')(null=True)) + + # Changing field 'RoundData.experimenter_notes' + db.alter_column(u'core_rounddata', 'experimenter_notes', self.gf('django.db.models.fields.TextField')(null=True)) + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'core.activitylog': { + 'Meta': {'object_name': 'ActivityLog'}, + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'log_message': ('django.db.models.fields.TextField', [], {}) + }, + u'core.address': { + 'Meta': {'object_name': 'Address'}, + 'city': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '128', 'blank': 'True'}), + 'street1': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'street2': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'zipcode': ('django.db.models.fields.CharField', [], {'max_length': '8', 'blank': 'True'}) + }, + u'core.chatmessage': { + 'Meta': {'ordering': "['-date_created']", 'object_name': 'ChatMessage', '_ormbases': [u'core.ParticipantRoundDataValue']}, + u'participantrounddatavalue_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ParticipantRoundDataValue']", 'unique': 'True', 'primary_key': 'True'}), + 'target_participant': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'target_participant_chat_message_set'", 'null': 'True', 'to': u"orm['core.ParticipantGroupRelationship']"}) + }, + u'core.comment': { + 'Meta': {'ordering': "['-date_created']", 'object_name': 'Comment', '_ormbases': [u'core.ParticipantRoundDataValue']}, + u'participantrounddatavalue_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ParticipantRoundDataValue']", 'unique': 'True', 'primary_key': 'True'}) + }, + u'core.experiment': { + 'Meta': {'ordering': "['date_created', 'status']", 'object_name': 'Experiment'}, + 'amqp_exchange_name': ('django.db.models.fields.CharField', [], {'default': "'vcweb.default.exchange'", 'max_length': '64'}), + 'authentication_code': ('django.db.models.fields.CharField', [], {'default': "'vcweb.auth.code'", 'max_length': '32'}), + 'current_repeated_round_sequence_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'current_round_sequence_number': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}), + 'current_round_start_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_activated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'duration': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}), + 'experiment_configuration': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.ExperimentConfiguration']"}), + 'experiment_metadata': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.ExperimentMetadata']"}), + 'experimenter': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['core.Experimenter']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'last_modified': ('vcweb.core.models.AutoDateTimeField', [], {'default': 'datetime.datetime.now'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'INACTIVE'", 'max_length': '32'}), + 'tick_duration': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}) + }, + u'core.experimentactivitylog': { + 'Meta': {'object_name': 'ExperimentActivityLog', '_ormbases': [u'core.ActivityLog']}, + u'activitylog_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['core.ActivityLog']", 'unique': 'True', 'primary_key': 'True'}), + 'experiment': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_log_set'", 'to': u"orm['core.Experiment']"}), + 'round_configuration': ('django.db.models.fields.related.ForeignKey... [truncated message content] |
From: <com...@bi...> - 2013-06-28 01:17:16
|
2 new commits in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/d7bce8d7d1b1/ Changeset: d7bce8d7d1b1 User: alllee Date: 2013-06-28 03:16:27 Summary: adding default values for surveyUrl and numberAlive to experiment model, otherwise updates via ko mapping don't create the observables properly. Affected #: 2 files diff -r dd9acb2175afdca8f5505fb833b6476eab7d130e -r d7bce8d7d1b1840e743c96a17d4d0580e73eb9a4 vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -78,7 +78,7 @@ </p><p> We will now move on to the <strong>paid rounds.</strong> - Before you continue, please <a data-bind='attr: { href: surveyUrl }'>fill out a questionnaire by clicking this link.</a> + Before you continue, please <a target='_blank' data-bind='attr: { href: surveyUrl }'>fill out a questionnaire by clicking this link.</a></p><ul class='pager'><li class='next'> diff -r dd9acb2175afdca8f5505fb833b6476eab7d130e -r d7bce8d7d1b1840e743c96a17d4d0580e73eb9a4 vcweb/bound/views.py --- a/vcweb/bound/views.py +++ b/vcweb/bound/views.py @@ -83,6 +83,8 @@ 'totalHarvest': 0, 'sessionOneStorage': 0, 'sessionTwoStorage': 0, + 'numberAlive': '4 out of 4', + 'surveyUrl': 'http://survey.qualtrics.com/SE/?SID=SV_0vzmIj5UsOgjoTX', } # FIXME: bloated method with too many special cases, try to refactor def get_view_model_json(experiment, participant_group_relationship, **kwargs): @@ -92,6 +94,7 @@ previous_round = experiment.previous_round previous_round_data = experiment.get_round_data(round_configuration=previous_round) experiment_model_dict = experiment.to_dict(include_round_data=False, default_value_dict=experiment_model_defaults) + logger.debug("returning view model json for round %s" % current_round) # round / experiment configuration data experiment_model_dict['timeRemaining'] = experiment.time_remaining @@ -141,14 +144,16 @@ # instructions rounds to practice rounds. own_group = participant_group_relationship.group own_resource_level = get_resource_level(own_group) - if current_round.is_playable_round: + if current_round.is_playable_round or current_round.is_debriefing_round: player_data, own_data = get_player_data(own_group, previous_round_data, current_round_data, participant_group_relationship) + logger.debug("player data: %s", player_data) experiment_model_dict.update(own_data) experiment_model_dict['playerData'] = player_data experiment_model_dict['averageHarvest'] = get_average_harvest(own_group, previous_round_data) experiment_model_dict['averageStorage'] = get_average_storage(own_group, current_round_data) c = Counter(map(itemgetter('alive'), experiment_model_dict['playerData'])) experiment_model_dict['numberAlive'] = "%s out of %s" % (c[True], sum(c.values())) + logger.debug("playable round, number alive is: %s", experiment_model_dict['numberAlive']) experiment_model_dict['resourceLevel'] = own_resource_level # participant group data parameters are only needed if this round is a data round or the previous round was a data round if previous_round.is_playable_round or current_round.is_playable_round: https://bitbucket.org/virtualcommons/vcweb/commits/5842f4eb8222/ Changeset: 5842f4eb8222 User: alllee Date: 2013-06-28 03:16:59 Summary: removing unnecessary debugs Affected #: 1 file diff -r d7bce8d7d1b1840e743c96a17d4d0580e73eb9a4 -r 5842f4eb8222acdcb3c470477164b06b1a8b1e79 vcweb/bound/views.py --- a/vcweb/bound/views.py +++ b/vcweb/bound/views.py @@ -153,7 +153,6 @@ experiment_model_dict['averageStorage'] = get_average_storage(own_group, current_round_data) c = Counter(map(itemgetter('alive'), experiment_model_dict['playerData'])) experiment_model_dict['numberAlive'] = "%s out of %s" % (c[True], sum(c.values())) - logger.debug("playable round, number alive is: %s", experiment_model_dict['numberAlive']) experiment_model_dict['resourceLevel'] = own_resource_level # participant group data parameters are only needed if this round is a data round or the previous round was a data round if previous_round.is_playable_round or current_round.is_playable_round: Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-27 00:09:19
|
2 new commits in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/feaaeb12244e/ Changeset: feaaeb12244e User: alllee Date: 2013-06-27 00:11:29 Summary: allowing experimenter notes to be cleared, improving messaging in experimenter monitor page Affected #: 2 files diff -r 7cd317a26a0053892d30f3e200c2eb13236a74a1 -r feaaeb12244e2a1a1427457e8c757ae662481b3d vcweb/core/ajax.py --- a/vcweb/core/ajax.py +++ b/vcweb/core/ajax.py @@ -4,8 +4,9 @@ from django.template import loader, Context, RequestContext from django.utils.html import escape +from vcweb.core import dumps from vcweb.core.decorators import experimenter_required, dajaxice_register -from vcweb.core import dumps +from vcweb.core.http import JsonResponse from vcweb.core.models import Experiment, RoundData, get_chat_message_parameter import logging @@ -91,14 +92,14 @@ experiment = _get_experiment(request, experiment_id) current_round_data = experiment.current_round_data current_experimenter_notes = current_round_data.experimenter_notes - if notes and notes != current_round_data.experimenter_notes: + if notes != current_round_data.experimenter_notes: if current_experimenter_notes: - experiment.log("Replacing existing experimenter notes: %s" % current_experimenter_notes) + experiment.log("Replacing existing experimenter notes %s with %s" % (current_experimenter_notes, notes)) current_round_data.experimenter_notes = notes current_round_data.save() - return dumps({ 'success': True }) + return JsonResponse(dumps({ 'success': True })) else: - return dumps({ 'success': False }) + return JsonResponse(dumps({ 'success': False, 'message': "Experimenter notes were unchanged, no need to save '%s'" % notes})) @experimenter_required diff -r 7cd317a26a0053892d30f3e200c2eb13236a74a1 -r feaaeb12244e2a1a1427457e8c757ae662481b3d vcweb/core/templates/experimenter/monitor.html --- a/vcweb/core/templates/experimenter/monitor.html +++ b/vcweb/core/templates/experimenter/monitor.html @@ -234,14 +234,17 @@ } } model.saveExperimenterNotes = function(localModel, evt) { + var notes = $('#experimenterNotesText').val(); + $('#submitExperimenterNotesButton').html("Submitting.."); Dajaxice.vcweb.core.save_experimenter_notes(function(data) { if (data.success) { - model.addMessage("Saved experimenter notes."); + model.addMessage("Saved experimenter notes: " + notes); } else { - model.addMessage("Unable to save experimenter notes: " + data); + model.addMessage(data.message); } + setTimeout(function() { $('#submitExperimenterNotesButton').html("Save"); }, 1000); }, { experiment_id: {{ experiment.pk }}, notes: notes }); } https://bitbucket.org/virtualcommons/vcweb/commits/dd9acb2175af/ Changeset: dd9acb2175af User: alllee Date: 2013-06-27 02:09:04 Summary: - making harvest decision submission UI logic more consistent - adding treatment ID to survey url query parameters - ending tour if it's still showing on submit decision TODO: survey url isn't showing up properly on round transition, and on refresh of the practice round debriefing the old storage data is zeroed out. Affected #: 3 files diff -r feaaeb12244e2a1a1427457e8c757ae662481b3d -r dd9acb2175afdca8f5505fb833b6476eab7d130e vcweb/bound/static/css/bound/style.css --- a/vcweb/bound/static/css/bound/style.css +++ b/vcweb/bound/static/css/bound/style.css @@ -9,7 +9,7 @@ } #chat-div { overflow: auto; - height: 820px; + height: 700px; } #chatMessage { } diff -r feaaeb12244e2a1a1427457e8c757ae662481b3d -r dd9acb2175afdca8f5505fb833b6476eab7d130e vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -7,7 +7,6 @@ {% block page %} <div class='row' id='page'><div id='content' class='span8'> - <h3><span data-bind='text: roundSequenceLabel'></span></h3><div data-bind='template: { name: templateId(), afterRender: afterRenderTemplate }'></div><div id='progress-modal' class='modal hide fade'> @@ -74,12 +73,12 @@ <script type='text/html' id='PRACTICE_ROUND_RESULTS'><h3>Practice Round Results</h3><p> - You harvested <span class='badge badge-success' data-bind='text: storage'></span> trees. + Your final savings were <span class='badge badge-success' data-bind='text: storage'></span> points. If this had been been a paid session, you would have earned <strong class='text-success' data-bind='text: totalEarnings'></strong>. </p><p> We will now move on to the <strong>paid rounds.</strong> - Before you continue, please <a data-bind='attr: { href: surveyUrl }'>fill out a final questionnaire by clicking this link.</a> + Before you continue, please <a data-bind='attr: { href: surveyUrl }'>fill out a questionnaire by clicking this link.</a></p><ul class='pager'><li class='next'> @@ -407,14 +406,9 @@ <div class='row' data-bind='ifnot: isResourceEmpty()'><div class='span8'><h3>Harvest</h3> - <div data-bind='if: submitted'> + <div data-bind='if: submitHarvestDecisionEnabled'><div class='alert alert-success'> - <i class='icon-leaf'></i> You have already submitted a harvest decision of <span class='badge badge-info' data-bind='text: harvestDecision'></span> trees. - </div> - </div> - <div data-bind='if: selectedHarvestDecision'> - <div class='alert alert-success'> - <i class='icon-leaf'></i> You have currently selected a harvest decision of <span class='badge badge-info' data-bind='text: harvestDecision'></span> trees. Click the Save button to finalize your decision. + <i class='icon-leaf'></i> You have currently <span data-bind='text: submitted ? "submitted" : "selected"'></span> a harvest decision of <span class='badge badge-info' data-bind='text: harvestDecision'></span> trees. Click the 'Ok I'm ready' button to continue. </div></div><div data-bind='ifnot: alive'> @@ -428,7 +422,7 @@ {% csrf_token %} <div id='harvestDecisionDiv' class='control-group'><div data-bind='template: { name: "harvest-decision-multiselect-template" }'></div> - <button disabled id='submitDecisionButton' data-bind='click: $root.submitDecision' type='submit' class='btn btn-primary'>Ok, I'm ready</button> + <button id='submitDecisionButton' data-bind='enable: submitHarvestDecisionEnabled, click: $root.submitDecision' type='submit' class='btn btn-primary'>Ok, I'm ready</button></div></form></div> @@ -528,6 +522,7 @@ function ExperimentModel(experimentModelJson) { var self = this; var model = ko.mapping.fromJS(experimentModelJson); + model.tour = ko.observable(); model.harvestDecisionOptions = ko.computed(function() { return ko.utils.range(0, model.maxHarvestDecision()); }); @@ -556,6 +551,7 @@ }); model.setupTour = function() { var tour = new Tour(); + model.tour(tour); tour.addStep({ element: "#dashboard-last-harvest", title: "Last harvest", placement: "top", content: "Your last round's harvest decision will be displayed here. Since this is the first practice round this is currently 0." @@ -571,11 +567,17 @@ tour.addStep({ element: "#chatMessage", title: "Text Chat", placement: "left", content: "If chat is enabled, you can communicate with your group by typing messages into this box and hitting the enter key or clicking 'Send'."}); - tour.addStep({ element: "#harvestDecisionSelect", title: "Harvest Decision", - placement: "top", - content: "Enter the number of trees you'd like to harvest here. For the purposes of this practice round, please select 10 now and click the 'Submit' button."}); + tour.addStep({ element: "#harvest-decision-td-10", title: "Harvest Decision", + placement: "right", + content: "Click on the number of trees you'd like to harvest here. For the purposes of this practice round, please select 10 now and click the 'Ok, I'm ready' button."}); tour.start(); } + model.endTour = function() { + var tour = model.tour(); + if (tour) { + tour.end(); + } + } model.setCurrentInterval = function(intervalId) { model.clearCurrentInterval(); model.currentInterval(intervalId); @@ -667,10 +669,14 @@ 1000)); } }; + model.submitHarvestDecisionEnabled = ko.computed(function() { + return model.submitted() || model.selectedHarvestDecision(); + }); model.isSelectedHarvestDecision = function(numberOfTrees) { - return (model.submitted() || model.selectedHarvestDecision()) && model.harvestDecision() >= numberOfTrees; + return model.submitHarvestDecisionEnabled() && (model.harvestDecision() >= numberOfTrees); } model.submitDecision = function() { + model.endTour(); console.debug("submitting decision for form " + model.harvestDecisionFormId() + " with harvest decision:" + model.harvestDecision()); $.post('submit-harvest-decision', {participant_group_id: model.participantGroupId(),integer_decision: model.harvestDecision(), submitted: true }, @@ -692,13 +698,11 @@ var formId = "#" + model.harvestDecisionFormId(numberOfTrees) var form = $(formId); console.debug("formId: " + formId + " -- number of trees: " + numberOfTrees); - model.selectedHarvestDecision(true); - model.harvestDecision(numberOfTrees); var formData = form.serialize(); console.debug(formData); $.post('submit-harvest-decision', formData, function(response) { - console.debug(response); - $('#submitDecisionButton').prop('disabled', false); + model.selectedHarvestDecision(true); + model.harvestDecision(numberOfTrees); }); return false; } diff -r feaaeb12244e2a1a1427457e8c757ae662481b3d -r dd9acb2175afdca8f5505fb833b6476eab7d130e vcweb/bound/views.py --- a/vcweb/bound/views.py +++ b/vcweb/bound/views.py @@ -102,9 +102,8 @@ experiment_model_dict['maxHarvestDecision'] = get_max_allowed_harvest_decision(participant_group_relationship, current_round_data, ec) experiment_model_dict['templateName'] = current_round.template_name experiment_model_dict['isPracticeRound'] = current_round.is_practice_round + # FIXME: only show the tour on the first practice round.. this is a bit brittle, maybe simply tie it to round #2? experiment_model_dict['showTour'] = current_round.is_practice_round and not previous_round.is_practice_round - # FIXME: extend this to first 3 regular rounds of each session as well? - # experiment_model_dict['waitThirtySeconds'] = current_round.is_practice_round and current_round.sequence_number < 6 # instructions round parameters if current_round.is_instructions_round: experiment_model_dict['isInstructionsRound'] = True @@ -122,16 +121,17 @@ experiment_model_dict['sessonTwoStorage'] = session_two_storage if current_round.is_survey_enabled: - # add last round data + logger.debug("survey was enabled") query_parameters = urlencode({ 'pid': participant_group_relationship.pk, - 'eid': experiment.pk + 'eid': experiment.pk, + 'tid': experiment.experiment_configuration.treatment_id, }) survey_url = current_round.survey_url - delimiter = '?' - if delimiter in survey_url: - delimiter = '&' - experiment_model_dict['surveyUrl'] = "{0}{1}{2}".format(current_round.survey_url, delimiter, query_parameters) + separator = '?' + if separator in survey_url: + separator = '&' + experiment_model_dict['surveyUrl'] = "{0}{1}{2}".format(current_round.survey_url, separator, query_parameters) # participant data Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-21 21:51:17
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/7cd317a26a00/ Changeset: 7cd317a26a00 User: alllee Date: 2013-06-21 23:51:06 Summary: adjustments to instructions Affected #: 1 file diff -r b0a68cb398a694c33115fb43ce8fcd8fb1a82f76 -r 7cd317a26a0053892d30f3e200c2eb13236a74a1 vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -146,8 +146,8 @@ <h3>Session <span data-bind='text: sessionId'></span> Instructions</h3><p> In this session, there are two groups or villages. Each group has a forest that the other group cannot harvest. Both -forests have the same growth capacity. In addition, you may observe the other group, their storage amounts, and their -forest status. Similarly, they may observe your group in the same way. +forests have the same growth capacity. You may observe the other group, their storage amounts, and their forest status. +Similarly, they may observe your group in the same way. </p><h3>Key points</h3><ul> @@ -217,24 +217,26 @@ <h4>Harvesting and Profit</h4><p> In this experiment you will harvest trees <i class='icon-leaf text-success'></i> to make a -profit and survive. Each round you may choose to harvest between <strong>0</strong> and <strong data-bind='text: maxHarvestDecision'></strong> trees. -Each tree you harvest will be exchanged for one token, and extra tokens will be kept in your <strong>savings</strong> -each round. +profit and survive. You may choose to harvest between <strong>0</strong> and <strong data-bind='text: maxHarvestDecision'></strong> trees during each round. +Each tree you harvest will earn you one savings point, and extra savings will carry over into the next round. </p><h4>Cost of living</h4><p> Each round you must pay living expenses of <span class='badge badge-important' data-bind='text: costOfLiving'></span> -tokens. If, at any point you do not have enough tokens to pay the living expenses, you will not be paid or be able to -continue harvesting for the rest of the experimental session. You will need to wait until the session is complete -before joining again. +savings points. If at any point you do not have enough savings to pay the living expenses, you will not become +"deceased" for the remainder of the session, preventing you from harvesting or receiving payment for that session. +You will need to wait until the session is complete before joining again. </p><h4>Cash payment</h4><p> -If you collect enough tokens to pay living expenses until the end of the session you will be paid in cash -<strong data-bind='text: formatCurrency(exchangeRate())'></strong> for each token you have. It is possible that you +If you have extra savings remaining at the end of play, you will be paid in cash +<strong data-bind='text: formatCurrency(exchangeRate())'></strong> for each savings point. It is possible that you could earn as much as <strong data-bind='text: formatCurrency(maxEarnings())'></strong> for the entire experiment. However, the final outcome depends on your choices and those of your group members. </p> +<p> +Instructional video placeholder. +</p><ul class='pager'><li class='next'><a href='javascript: void();' data-bind='click: activateTemplate.bind($data, "GENERAL_INSTRUCTIONS2")'>OK, I understand</a> @@ -247,8 +249,8 @@ <h4>Forest Growth</h4><p> Trees in the forest regrow much as real trees do. The more trees there are, the faster empty places fill up with new -trees. It is possible to destroy the forest by overharvesting. If the forest is destroyed there will be no more trees -to harvest for the rest of the experiment. +trees. It is possible to destroy the forest by overharvesting. If the forest is destroyed, no more trees will regrow +and there will be no more trees to harvest for the rest of the experiment. </p><h4>Carrying Capacity</h4><p> @@ -278,14 +280,15 @@ <div id='instructions3'><h4>Groups and Rounds</h4><p> -You have been randomly assigned to a group of size <strong data-bind='text:participantsPerGroup'></strong>. +You have been assigned to a random group with <strong data-bind='text:participantsPerGroup'></strong> members. In this experiment you will be sharing a virtual forest with the <span data-bind='text: participantsPerGroup() - 1'></span> other members in your group. All participants in the experiment are in identical conditions and must harvest -trees to pay the cost of living <span data-bind='text: costOfLiving'></span> and make a profit. +trees to pay the cost of living (<span data-bind='text: costOfLiving'></span> savings points per round) to make a profit +and accrue savings. You will be able to text chat only with members of your own group. </p><p> We will now begin with some <strong>practice rounds</strong>. These rounds will <strong>not</strong> contribute to your -earnings. If you have any questions please raise your hand and someone will come to address your question. Otherwise, +savings. If you have any questions please raise your hand and someone will come to address your question. Otherwise, please click the button to continue. </p><ul class='pager'> @@ -306,7 +309,7 @@ <h3>Group and Individual Status</h3><p> You will be able to observe the status of the members of your group each round. Likewise, group members will see your -status, and those of your group. +status, and those of your group. You will be able to text chat with your group members. </p><h3>Harvest Choice</h3><p> @@ -314,12 +317,14 @@ decision: </p><ol> -<li>Select a harvest amount and click submit</li> +<li>Select a harvest amount and click "Ok, I'm ready"</li><li>Select a harvest amount and wait for the end of the session</li></ol><p> At the end of each round a countdown will alert you when there are 10 seconds remaining to make a harvest choice. When -the countdown reaches zero, any value you have selected will be auto-submitted. The default harvest is zero. +the countdown reaches zero, any value you have selected will be auto-submitted. If you do not select a harvest value, +the default value of 0 will automatically be selected. You may change your harvest decision multiple times before +clicking "Ok, I'm Ready" until the 1-minute time limit is up. </p><ul class='pager'><li class='previous'> @@ -423,7 +428,7 @@ {% csrf_token %} <div id='harvestDecisionDiv' class='control-group'><div data-bind='template: { name: "harvest-decision-multiselect-template" }'></div> - <button disabled id='submitDecisionButton' data-bind='click: $root.submitDecision, text: submitted() ? "Continue" : "Save"' type='submit' class='btn btn-primary'></button> + <button disabled id='submitDecisionButton' data-bind='click: $root.submitDecision' type='submit' class='btn btn-primary'>Ok, I'm ready</button></div></form></div> Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-20 02:29:37
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/b0a68cb398a6/ Changeset: b0a68cb398a6 User: alllee Date: 2013-06-20 04:29:23 Summary: reducing number of redundant queries for player data values within the group (last harvest decision, storage, and player status / alive / dead) minor improvements to participant UI for saving selected harvest decisions Affected #: 3 files diff -r 2a077522e3c42ed7a228d08984cb101d6903285a -r b0a68cb398a694c33115fb43ce8fcd8fb1a82f76 vcweb/bound/models.py --- a/vcweb/bound/models.py +++ b/vcweb/bound/models.py @@ -1,7 +1,7 @@ from django.db.models import Sum from django.dispatch import receiver from vcweb.core import signals, simplecache -from vcweb.core.models import (ExperimentMetadata, Parameter, ParticipantRoundDataValue, GroupRelationship, +from vcweb.core.models import (DefaultValue, ExperimentMetadata, Parameter, ParticipantRoundDataValue, GroupRelationship, GroupCluster, GroupClusterDataValue, RoundData, RoundConfiguration) from vcweb.forestry.models import (get_harvest_decision_parameter, get_harvest_decision, get_harvest_decision_dv, get_regrowth_rate_parameter, get_group_harvest_parameter, get_reset_resource_level_parameter, get_resource_level as get_unshared_resource_level, @@ -9,6 +9,7 @@ get_resource_level_parameter, get_resource_level_dv as get_unshared_resource_level_dv, set_group_harvest, set_regrowth, set_harvest_decision) +from collections import defaultdict import logging logger = logging.getLogger(__name__) @@ -197,6 +198,39 @@ def get_number_alive(group, round_data): return ParticipantRoundDataValue.objects.for_group(group, parameter=get_player_status_parameter(), round_data=round_data, boolean_value=True).count() +def get_player_data(group, previous_round_data, current_round_data, self_pgr): + prdvs = ParticipantRoundDataValue.objects.for_group(group=group, + round_data__in=[previous_round_data, current_round_data], + parameter__in=(get_player_status_parameter(), get_storage_parameter(), get_harvest_decision_parameter()), + ) + player_dict = defaultdict(lambda: defaultdict(lambda: None)) + for prdv in prdvs: + player_dict[prdv.participant_group_relationship][prdv.parameter] = prdv + player_data = [] + for pgr, pgrdv_dict in player_dict.iteritems(): + # FIXME: figure out a way to handle default values elegantly in this case since we aren't using the accessor + # methods + for int_parameter in (get_harvest_decision_parameter(), get_storage_parameter()): + if pgrdv_dict[int_parameter] is None: + pgrdv_dict[int_parameter] = DefaultValue(0) + if pgrdv_dict[get_player_status_parameter()] is None: + pgrdv_dict[get_player_status_parameter()] = DefaultValue(True) + player_data.append({ + 'id': pgr.pk, + 'number': pgr.participant_number, + 'lastHarvestDecision': pgrdv_dict[get_harvest_decision_parameter()].int_value, + 'alive': pgrdv_dict[get_player_status_parameter()].boolean_value, + 'storage': pgrdv_dict[get_storage_parameter()].int_value, + }) + own_player = player_dict[self_pgr] + return (player_data, { + 'lastHarvestDecision': own_player[get_harvest_decision_parameter()].int_value, + 'alive': own_player[get_player_status_parameter()].boolean_value, + 'storage': own_player[get_storage_parameter()].int_value, + }) + + + def set_player_status(participant_group_relationship, round_data, value): status_dv = get_player_status_dv(participant_group_relationship, round_data) status_dv.boolean_value = value diff -r 2a077522e3c42ed7a228d08984cb101d6903285a -r b0a68cb398a694c33115fb43ce8fcd8fb1a82f76 vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -404,7 +404,12 @@ <h3>Harvest</h3><div data-bind='if: submitted'><div class='alert alert-success'> - <i class='icon-leaf'></i> You have currently selected a harvest decision of <span class='badge badge-info' data-bind='text: harvestDecision'></span> trees. Click the submit button to finalize your decision. + <i class='icon-leaf'></i> You have already submitted a harvest decision of <span class='badge badge-info' data-bind='text: harvestDecision'></span> trees. + </div> + </div> + <div data-bind='if: selectedHarvestDecision'> + <div class='alert alert-success'> + <i class='icon-leaf'></i> You have currently selected a harvest decision of <span class='badge badge-info' data-bind='text: harvestDecision'></span> trees. Click the Save button to finalize your decision. </div></div><div data-bind='ifnot: alive'> @@ -418,7 +423,7 @@ {% csrf_token %} <div id='harvestDecisionDiv' class='control-group'><div data-bind='template: { name: "harvest-decision-multiselect-template" }'></div> - <button id='submitDecisionButton' data-bind='click: $root.submitDecision' type='submit' class='btn btn-primary'>Submit</button> + <button disabled id='submitDecisionButton' data-bind='click: $root.submitDecision, text: submitted() ? "Continue" : "Save"' type='submit' class='btn btn-primary'></button></div></form></div> @@ -688,6 +693,7 @@ console.debug(formData); $.post('submit-harvest-decision', formData, function(response) { console.debug(response); + $('#submitDecisionButton').prop('disabled', false); }); return false; } @@ -737,7 +743,6 @@ model.chatEnabled(! chatDisabled); } model.afterRenderTemplate = function(elements) { - console.debug("after render template: " + model.harvestDecision()); if (model.templateId() === "REGULAR") { model.startRound() } diff -r 2a077522e3c42ed7a228d08984cb101d6903285a -r b0a68cb398a694c33115fb43ce8fcd8fb1a82f76 vcweb/bound/views.py --- a/vcweb/bound/views.py +++ b/vcweb/bound/views.py @@ -10,8 +10,8 @@ from vcweb.bound.models import (get_experiment_metadata, get_regrowth_rate, get_max_allowed_harvest_decision, get_cost_of_living, get_resource_level, get_initial_resource_level, get_total_storage, get_storage, get_all_session_storages, get_last_harvest_decision, get_harvest_decision_dv, get_harvest_decision_parameter, - set_harvest_decision, can_observe_other_group, is_player_alive, get_average_harvest, get_average_storage, - get_total_harvest, get_number_alive) + set_harvest_decision, can_observe_other_group, get_average_harvest, get_average_storage, + get_total_harvest, get_number_alive, get_player_data) from urllib import urlencode import logging @@ -73,16 +73,18 @@ 'maximumResourcesToDisplay': 20, 'warningCountdownTime': 10, 'harvestDecision': 0, + 'storage': 0, 'roundDuration': 60, 'chatMessages': [], 'canObserveOtherGroup': False, + 'selectedHarvestDecision': False, 'isInstructionsRound': False, 'waitThirtySeconds': False, 'totalHarvest': 0, 'sessionOneStorage': 0, 'sessionTwoStorage': 0, } -# FIXME: need to distinguish between instructions / welcome rounds and practice/regular rounds +# FIXME: bloated method with too many special cases, try to refactor def get_view_model_json(experiment, participant_group_relationship, **kwargs): ec = experiment.experiment_configuration current_round = experiment.current_round @@ -139,23 +141,15 @@ # instructions rounds to practice rounds. own_group = participant_group_relationship.group own_resource_level = get_resource_level(own_group) - last_harvest_decision = get_last_harvest_decision(participant_group_relationship, round_data=previous_round_data) - # FIXME: redundancy with playerData and direct values - experiment_model_dict['playerData'] = [{ - 'id': pgr.pk, - 'number': pgr.participant_number, - 'lastHarvestDecision': get_last_harvest_decision(pgr, round_data=previous_round_data), - 'alive': is_player_alive(pgr, current_round_data), - 'storage': get_storage(pgr, current_round_data), - } for pgr in own_group.participant_group_relationship_set.all()] - experiment_model_dict['lastHarvestDecision'] = last_harvest_decision - experiment_model_dict['storage'] = get_storage(participant_group_relationship, current_round_data) + if current_round.is_playable_round: + player_data, own_data = get_player_data(own_group, previous_round_data, current_round_data, participant_group_relationship) + experiment_model_dict.update(own_data) + experiment_model_dict['playerData'] = player_data + experiment_model_dict['averageHarvest'] = get_average_harvest(own_group, previous_round_data) + experiment_model_dict['averageStorage'] = get_average_storage(own_group, current_round_data) + c = Counter(map(itemgetter('alive'), experiment_model_dict['playerData'])) + experiment_model_dict['numberAlive'] = "%s out of %s" % (c[True], sum(c.values())) experiment_model_dict['resourceLevel'] = own_resource_level - experiment_model_dict['alive'] = is_player_alive(participant_group_relationship, current_round_data) - experiment_model_dict['averageHarvest'] = get_average_harvest(own_group, previous_round_data) - experiment_model_dict['averageStorage'] = get_average_storage(own_group, current_round_data) - c = Counter(map(itemgetter('alive'), experiment_model_dict['playerData'])) - experiment_model_dict['numberAlive'] = "%s out of %s" % (c[True], sum(c.values())) # participant group data parameters are only needed if this round is a data round or the previous round was a data round if previous_round.is_playable_round or current_round.is_playable_round: harvest_decision = get_harvest_decision_dv(participant_group_relationship, current_round_data) Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-19 09:43:30
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/2a077522e3c4/ Changeset: 2a077522e3c4 User: alllee Date: 2013-06-19 11:43:21 Summary: fixing harvest decision submission to properly set the 'submitted' flag Affected #: 1 file diff -r 2eca25ee1b30c97f1a01873887864f5c25beb396 -r 2a077522e3c42ed7a228d08984cb101d6903285a vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -490,10 +490,10 @@ <table class='table'><tr class='row harvest-decision-resources' data-bind='foreach: harvestDecisionOptions'><td data-bind='attr: { id: "harvest-decision-td-" + $data }'> - <form data-bind='attr: { id: "harvest-decision-multiselect-form" + $data }'> + <form data-bind='attr: { id: $root.harvestDecisionFormId($data) }'><input id='participantGroupId' type='hidden' name='participant_group_id' data-bind='value: $root.participantGroupId'/><input id='harvestDecisionTextInput' type='hidden' name='integer_decision' data-bind='value: $data'> - <div class='harvest-decision-tree-div' data-bind='click: $root.selectDecision.bind($root, $data, "#harvest-decision-multiselect-form" + $data)'> + <div class='harvest-decision-tree-div' data-bind='click: $root.selectDecision.bind($root, $data)'><div data-bind='css: { selected: $root.isSelectedHarvestDecision($data), "harvest-decision-tree": $data > 0, "zero-harvest-decision": $data === 0}'></div><span style='margin-left: 2px;' class='badge badge-info' data-bind='text: $data'></span></div> @@ -521,6 +521,10 @@ model.harvestDecisionOptions = ko.computed(function() { return ko.utils.range(0, model.maxHarvestDecision()); }); + model.harvestDecisionFormId = function(numberOfTrees) { + numberOfTrees = numberOfTrees || model.harvestDecision(); + return "harvest-decision-form" + numberOfTrees; + } model.calculateEarnings = function(quantity) { return function() { return formatCurrency(quantity * model.exchangeRate()); @@ -657,25 +661,25 @@ return (model.submitted() || model.selectedHarvestDecision()) && model.harvestDecision() >= numberOfTrees; } model.submitDecision = function() { - console.debug("submitting decision"); - model.submitted(true); - var formData = $('#vcweb-form').serialize(); - console.debug("posting form data: " + formData); - $.post('submit-harvest-decision', formData, function(response) { + console.debug("submitting decision for form " + model.harvestDecisionFormId() + " with harvest decision:" + model.harvestDecision()); + $.post('submit-harvest-decision', + {participant_group_id: model.participantGroupId(),integer_decision: model.harvestDecision(), submitted: true }, + function(response) { console.debug(response); // hide selection, disable chat, show waiting room model.participantReady(response.message); model.clearCurrentInterval(); + model.submitted(true); model.secondsLeft(0); }); } - model.selectDecision = function(numberOfTrees, formId) { + model.selectDecision = function(numberOfTrees) { if (model.submitted()) { - console.debug("Already submitted a decision, aborting."); + alert("You've already submitted a harvest decision this round."); return false; } - formId = formId || "#vcweb-form"; + var formId = "#" + model.harvestDecisionFormId(numberOfTrees) var form = $(formId); console.debug("formId: " + formId + " -- number of trees: " + numberOfTrees); model.selectedHarvestDecision(true); Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-19 07:54:20
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/2eca25ee1b30/ Changeset: 2eca25ee1b30 User: alllee Date: 2013-06-19 09:53:53 Summary: setting participant ready on submit Affected #: 1 file diff -r 885fb8b0272fa589d55885ae1fa0ceb5f6e04c38 -r 2eca25ee1b30c97f1a01873887864f5c25beb396 vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -648,7 +648,6 @@ if (! model.isTimerRunning()) { // FIXME: need to verify that this invocation will work properly model.submitDecision(); - model.clearCurrentInterval(); } }, 1000)); @@ -664,10 +663,10 @@ console.debug("posting form data: " + formData); $.post('submit-harvest-decision', formData, function(response) { console.debug(response); - getWebSocket().send(createReadyEvent(response.message)); + // hide selection, disable chat, show waiting room + model.participantReady(response.message); model.clearCurrentInterval(); model.secondsLeft(0); - // FIXME: hide selection, disable chat, show the waiting }); } Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-19 01:50:58
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/885fb8b0272f/ Changeset: 885fb8b0272f User: alllee Date: 2013-06-19 03:50:20 Summary: more work to allow repeated selections for harvest decisions (until submit is clicked) Affected #: 5 files diff -r e7b0cd5a4365ad3786e1f326f8d9f2c023b1f5a2 -r 885fb8b0272fa589d55885ae1fa0ceb5f6e04c38 vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -404,9 +404,7 @@ <h3>Harvest</h3><div data-bind='if: submitted'><div class='alert alert-success'> - <i class='icon-leaf'></i> You have submitted a harvest decision for <span class='badge badge-info' - data-bind='text: harvestDecision'></span> trees. Please wait quietly while the rest of the participants submit - their decisions. + <i class='icon-leaf'></i> You have currently selected a harvest decision of <span class='badge badge-info' data-bind='text: harvestDecision'></span> trees. Click the submit button to finalize your decision. </div></div><div data-bind='ifnot: alive'> @@ -419,7 +417,8 @@ <form id='vcweb-form' method='post' class='form-horizontal' > {% csrf_token %} <div id='harvestDecisionDiv' class='control-group'> - <div data-bind='template: { name: "harvest-decision-click-template" }'></div> + <div data-bind='template: { name: "harvest-decision-multiselect-template" }'></div> + <button id='submitDecisionButton' data-bind='click: $root.submitDecision' type='submit' class='btn btn-primary'>Submit</button></div></form></div> @@ -487,14 +486,14 @@ </div></div></script> -<script type='text/html' id='harvest-decision-click-template'> +<script type='text/html' id='harvest-decision-multiselect-template'><table class='table'><tr class='row harvest-decision-resources' data-bind='foreach: harvestDecisionOptions'><td data-bind='attr: { id: "harvest-decision-td-" + $data }'> - <form data-bind='attr: { id: "harvest-decision-click-form" + $data }'> + <form data-bind='attr: { id: "harvest-decision-multiselect-form" + $data }'><input id='participantGroupId' type='hidden' name='participant_group_id' data-bind='value: $root.participantGroupId'/><input id='harvestDecisionTextInput' type='hidden' name='integer_decision' data-bind='value: $data'> - <div class='harvest-decision-tree-div' data-bind='click: $root.submitDecision.bind($data, "#harvest-decision-click-form" + $data)'> + <div class='harvest-decision-tree-div' data-bind='click: $root.selectDecision.bind($root, $data, "#harvest-decision-multiselect-form" + $data)'><div data-bind='css: { selected: $root.isSelectedHarvestDecision($data), "harvest-decision-tree": $data > 0, "zero-harvest-decision": $data === 0}'></div><span style='margin-left: 2px;' class='badge badge-info' data-bind='text: $data'></span></div> @@ -508,10 +507,10 @@ <span class='add-on'><i class='icon-leaf'></i></span><input id='participantGroupId' type='hidden' name='participant_group_id' data-bind='value: participantGroupId'/><input id='harvestDecisionTextInput' type='hidden' name='integer_decision' data-bind='value: harvestDecision'> + <input id='harvestDecisionSubmitted' style='display: none;' type='checkbox' name='submitted' data-bind='value: submitted'/><select id='harvestDecisionSelect' name='harvest_decision' required="required" form="vcweb-form" data-bind='options: harvestDecisionOptions, value: harvestDecision'></select></div> - <button id='submitDecisionButton' type='submit' class='btn btn-primary'>Submit</button></script><script src='{% static "js/bootstrap-tour.js" %}'></script><script type="text/javascript"> @@ -520,11 +519,7 @@ var self = this; var model = ko.mapping.fromJS(experimentModelJson); model.harvestDecisionOptions = ko.computed(function() { - var lowerBound = 0; - if (model.submitted()) { - lowerBound = 1; - } - return ko.utils.range(lowerBound, model.maxHarvestDecision()); + return ko.utils.range(0, model.maxHarvestDecision()); }); model.calculateEarnings = function(quantity) { return function() { @@ -533,6 +528,7 @@ } model.secondsLeft = ko.observable(0); model.currentInterval = ko.observable(); + model.selectedHarvestDecision = ko.observable(false); model.sessionOneEarnings = ko.computed(model.calculateEarnings(model.sessionOneStorage())); model.sessionTwoEarnings = ko.computed(model.calculateEarnings(model.sessionTwoStorage())); model.totalEarnings = ko.computed(model.calculateEarnings(model.storage())); @@ -650,10 +646,8 @@ setInterval(function() { model.tick(); if (! model.isTimerRunning()) { - if (! model.submitted()) { - // don't auto-submit decisions if we have already submit one - model.submitDecision(); - } + // FIXME: need to verify that this invocation will work properly + model.submitDecision(); model.clearCurrentInterval(); } }, @@ -661,26 +655,36 @@ } }; model.isSelectedHarvestDecision = function(numberOfTrees) { - return model.submitted() && model.harvestDecision() >= numberOfTrees; + return (model.submitted() || model.selectedHarvestDecision()) && model.harvestDecision() >= numberOfTrees; } - model.submitDecision = function(formId, numberOfTrees) { + model.submitDecision = function() { + console.debug("submitting decision"); + model.submitted(true); + var formData = $('#vcweb-form').serialize(); + console.debug("posting form data: " + formData); + $.post('submit-harvest-decision', formData, function(response) { + console.debug(response); + getWebSocket().send(createReadyEvent(response.message)); + model.clearCurrentInterval(); + model.secondsLeft(0); + // FIXME: hide selection, disable chat, show the waiting + }); + + } + model.selectDecision = function(numberOfTrees, formId) { if (model.submitted()) { - alert("Should we allow multiple submission? Right now it is disabled."); + console.debug("Already submitted a decision, aborting."); return false; } formId = formId || "#vcweb-form"; - numberOfTrees = numberOfTrees || 0; + var form = $(formId); console.debug("formId: " + formId + " -- number of trees: " + numberOfTrees); - var formData = $(formId).serialize(); - model.submitted(true); + model.selectedHarvestDecision(true); model.harvestDecision(numberOfTrees); + var formData = form.serialize(); console.debug(formData); $.post('submit-harvest-decision', formData, function(response) { - console.log(response); - // model.update($.parseJSON(response.experimentModelJson)); - getWebSocket().send(createReadyEvent(response.message)); - model.clearCurrentInterval(); - model.secondsLeft(0); + console.debug(response); }); return false; } diff -r e7b0cd5a4365ad3786e1f326f8d9f2c023b1f5a2 -r 885fb8b0272fa589d55885ae1fa0ceb5f6e04c38 vcweb/bound/views.py --- a/vcweb/bound/views.py +++ b/vcweb/bound/views.py @@ -40,8 +40,10 @@ participant_group_id = form.cleaned_data['participant_group_id'] pgr = get_object_or_404(ParticipantGroupRelationship, pk=participant_group_id) harvest_decision = form.cleaned_data['integer_decision'] + submitted = form.cleaned_data['submitted'] + logger.debug("pgr %s harvested %s - final submission? %s", pgr, harvest_decision, submitted) round_data = experiment.current_round_data - set_harvest_decision(pgr, harvest_decision, round_data, submitted=True) + set_harvest_decision(pgr, harvest_decision, round_data, submitted=submitted) message = "%s harvested %s trees" experiment.log(message % (pgr.participant, harvest_decision)) response_dict = { diff -r e7b0cd5a4365ad3786e1f326f8d9f2c023b1f5a2 -r 885fb8b0272fa589d55885ae1fa0ceb5f6e04c38 vcweb/core/forms.py --- a/vcweb/core/forms.py +++ b/vcweb/core/forms.py @@ -189,6 +189,7 @@ class SingleIntegerDecisionForm(forms.Form): integer_decision = forms.IntegerField(required=True, min_value=0) participant_group_id = forms.IntegerField(required=True, widget=forms.widgets.HiddenInput) + submitted = forms.BooleanField(required=False, widget=forms.widgets.HiddenInput) class QuizForm(forms.Form): name_question = forms.CharField(max_length=64, label=_("What is your name?")) diff -r e7b0cd5a4365ad3786e1f326f8d9f2c023b1f5a2 -r 885fb8b0272fa589d55885ae1fa0ceb5f6e04c38 vcweb/core/templates/experimenter/monitor.html --- a/vcweb/core/templates/experimenter/monitor.html +++ b/vcweb/core/templates/experimenter/monitor.html @@ -191,7 +191,7 @@ </div></div><div id='progress-modal' class='modal hide fade'> - <div class='model-header'> + <div class='modal-header'><h3>Updating experiment data</h3></div><div class='modal-body'> @@ -239,6 +239,9 @@ if (data.success) { model.addMessage("Saved experimenter notes."); } + else { + model.addMessage("Unable to save experimenter notes: " + data); + } }, { experiment_id: {{ experiment.pk }}, notes: notes }); } diff -r e7b0cd5a4365ad3786e1f326f8d9f2c023b1f5a2 -r 885fb8b0272fa589d55885ae1fa0ceb5f6e04c38 vcweb/forestry/models.py --- a/vcweb/forestry/models.py +++ b/vcweb/forestry/models.py @@ -106,7 +106,7 @@ return ParticipantRoundDataValue.objects.create(participant_group_relationship=participant_group_relationship, parameter=get_harvest_decision_parameter(), round_data=round_data, int_value=value, - submitted=True) + submitted=submitted) def set_resource_level(group, value, round_data=None): return group.set_data_value(parameter=get_resource_level_parameter(), round_data=round_data, value=value) Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-15 07:17:43
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/e7b0cd5a4365/ Changeset: e7b0cd5a4365 User: alllee Date: 2013-06-15 09:17:28 Summary: fixing participant data value update Affected #: 1 file diff -r 111f680c386474fb8e301704868e11881576a450 -r e7b0cd5a4365ad3786e1f326f8d9f2c023b1f5a2 vcweb/core/templates/experimenter/monitor.html --- a/vcweb/core/templates/experimenter/monitor.html +++ b/vcweb/core/templates/experimenter/monitor.html @@ -251,12 +251,13 @@ model.loadRoundData = function(localModel) { console.debug("loading round data for round data with pk: " + localModel.pk()); console.debug(localModel); + if (localModel.participantDataValues().length > 0 || localModel.groupDataValues() > 0) { + console.debug("assuming round data has already been loaded"); + return; + } Dajaxice.vcweb.core.get_round_data(function(data) { - console.debug("incoming data"); - console.debug(data); - ko.mapping.fromJS(data, localModel); - console.debug("local model is now: "); - console.debug(localModel); + localModel.groupDataValues(data.groupDataValues); + localModel.participantDataValues(data.participantDataValues); }, {pk: localModel.pk()}); }; Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-14 20:59:46
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/111f680c3864/ Changeset: 111f680c3864 User: alllee Date: 2013-06-14 22:59:35 Summary: fixing ajax call to get_round_data Affected #: 1 file diff -r 7a67a2a53020e9f738f0b6677d12299252434c79 -r 111f680c386474fb8e301704868e11881576a450 vcweb/core/templates/experimenter/monitor.html --- a/vcweb/core/templates/experimenter/monitor.html +++ b/vcweb/core/templates/experimenter/monitor.html @@ -249,13 +249,16 @@ window.location.reload(true); }; model.loadRoundData = function(localModel) { - console.debug("loading round data"); + console.debug("loading round data for round data with pk: " + localModel.pk()); + console.debug(localModel); Dajaxice.vcweb.core.get_round_data(function(data) { + console.debug("incoming data"); + console.debug(data); ko.mapping.fromJS(data, localModel); console.debug("local model is now: "); console.debug(localModel); }, - {pk: localModel.pk}); + {pk: localModel.pk()}); }; model.update = function(localModel, evt) { $('#progress-modal').modal('show'); Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-14 20:53:08
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/7a67a2a53020/ Changeset: 7a67a2a53020 User: alllee Date: 2013-06-14 22:52:56 Summary: limiting activity log to 100 to prevent DOM freezes - should be applied to chat messages and other large object sets as well Affected #: 1 file diff -r 7f7bce64f6a0b70e4633ebf56ae4ca8096024cfc -r 7a67a2a53020e9f738f0b6677d12299252434c79 vcweb/core/models.py --- a/vcweb/core/models.py +++ b/vcweb/core/models.py @@ -1014,7 +1014,7 @@ # XXX: stubs for round data experiment_dict['allRoundData'] = self.all_round_data() experiment_dict['chatMessages'] = [chat_message.to_dict() for chat_message in self.all_chat_messages] - experiment_dict['messages'] = map(str, self.activity_log_set.order_by('-date_created')) + experiment_dict['messages'] = map(str, self.activity_log_set.order_by('-date_created')[:100]) experiment_dict['experimenterNotes'] = self.current_round_data.experimenter_notes if self.is_round_in_progress else '' experiment_dict['groups'] = [group.to_dict() for group in self.groups] # FIXME: remove if unused/unneeded, intended to provide some way to include more experiment attributes at invocation time Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-12 22:48:49
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/7f7bce64f6a0/ Changeset: 7f7bce64f6a0 User: alllee Date: 2013-06-13 00:48:42 Summary: moving deforestation jpg to depleted-trees.jpg in the bound namespace Affected #: 2 files diff -r 0057559a5a82a0746dc940590b7db6714c0f381f -r 7f7bce64f6a0b70e4633ebf56ae4ca8096024cfc vcweb/bound/static/images/bound/depleted-trees.jpg Binary file vcweb/bound/static/images/bound/depleted-trees.jpg has changed diff -r 0057559a5a82a0746dc940590b7db6714c0f381f -r 7f7bce64f6a0b70e4633ebf56ae4ca8096024cfc vcweb/bound/templates/bound/participate.html --- a/vcweb/bound/templates/bound/participate.html +++ b/vcweb/bound/templates/bound/participate.html @@ -439,7 +439,7 @@ <div class='alert alert-message'><strong class='badge badge-success' data-bind='text:resourceLevel'></strong> trees</div><div data-bind="visible: isResourceEmpty"><div class='well'> - <center><img src="{% static 'images/forestry/deforestation.jpg' %}" class="img-polaroid" width="425" + <center><img src="{% static 'images/bound/depleted-trees.jpg' %}" class="img-polaroid" width="425" height="282"></center></div><div class='alert alert-error'><i class='icon-warning-sign'></i> There are no more trees to harvest. Please wait until the next round begins.</div> Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-06-12 00:21:22
|
2 new commits in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/d240724225d9/ Changeset: d240724225d9 User: alllee Date: 2013-06-12 02:20:04 Summary: version bump on fontawesome Affected #: 7 files diff -r ce0dac0feb5919e9997eabe35a6fd182a0dc5f2f -r d240724225d90b0571e27c6569a73f9f29f0b6c7 vcweb/static/bootstrap/css/font-awesome.min.css --- a/vcweb/static/bootstrap/css/font-awesome.min.css +++ b/vcweb/static/bootstrap/css/font-awesome.min.css @@ -1,33 +1,24 @@ /*! - * Font Awesome 3.0.2 - * the iconic font designed for use with Twitter Bootstrap + * Font Awesome 3.1.0 + * the iconic font designed for Bootstrap * ------------------------------------------------------- * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fortawesome.github.com/Font-Awesome/ + * can be found at: http://fontawesome.io * * License * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - + * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - * http://opensource.org/licenses/mit-license.html - * - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + * - Font Awesome documentation licensed under CC BY 3.0 License - + * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + * "Font Awesome by Dave Gandy - http://fontawesome.io" * Contact * ------------------------------------------------------- - * Email: da...@da... + * Email: da...@fo... * Twitter: http://twitter.com/fortaweso_me * Work: Lead Product Designer @ http://kyruus.com - */ - -@font-face{ - font-family:'FontAwesome'; - src:url('../font/fontawesome-webfont.eot?v=3.0.1'); - src:url('../font/fontawesome-webfont.eot?#iefix&v=3.0.1') format('embedded-opentype'), - url('../font/fontawesome-webfont.woff?v=3.0.1') format('woff'), - url('../font/fontawesome-webfont.ttf?v=3.0.1') format('truetype'); - font-weight:normal; - font-style:normal } - -[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}a [class^="icon-"],a [class*=" icon-"]{display:inline-block}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}.btn [class^="icon-"],.nav [class^="icon-"],.btn [class*=" icon-"],.nav [class*=" icon-"]{display:inline}.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em}li [class^="icon-"],.nav li [class^="icon-"],li [class*=" icon-"],.nav li [class*=" icon-"]{display:inline-block;width:1.25em;text-align:center}li [class^="icon-"].icon-large,.nav li [class^="icon-"].icon-large,li [class*=" icon-"].icon-large,.nav li [class*=" icon-"].icon-large{width:1.5625em}ul.icons{list-style-type:none;text-indent:-0.75em}ul.icons li [class^="icon-"],ul.icons li [class*=" icon-"]{width:.75em}.icon-muted{color:#eee}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em}.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em}.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}@-moz-document url-prefix(){.icon-spin{height:.9em}.btn .icon-spin{height:auto}.icon-spin.icon-large{height:1.25em}.btn .icon-spin.icon-large{height:.75em}}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"} \ No newline at end of file + */@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot?v=3.1.0');src:url('../font/fontawesome-webfont.eot?#iefix&v=3.1.0') format('embedded-opentype'),url('../font/fontawesome-webfont.woff?v=3.1.0') format('woff'),url('../font/fontawesome-webfont.ttf?v=3.1.0') format('truetype'),url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.1.0') format('svg');font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}a [class^="icon-"],a [class*=" icon-"],a [class^="icon-"]:before,a [class*=" icon-"]:before{display:inline}[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.2857142857142858em;text-align:center}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.5714285714285714em}ul.icons-ul{list-style-type:none;text-indent:-0.7142857142857143em;margin-left:2.142857142857143em}ul.icons-ul>li .icon-li{width:.7142857142857143em;display:inline-block;text-align:center}[class^="icon-"].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none}.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em}.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em}.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical:before{-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before,.icon-rotate-right:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before,.icon-mail-forward:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before,.icon-rotate-left:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before,.icon-mail-reply:before{content:"\f112"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"} \ No newline at end of file diff -r ce0dac0feb5919e9997eabe35a6fd182a0dc5f2f -r d240724225d90b0571e27c6569a73f9f29f0b6c7 vcweb/static/bootstrap/font/FontAwesome.otf Binary file vcweb/static/bootstrap/font/FontAwesome.otf has changed diff -r ce0dac0feb5919e9997eabe35a6fd182a0dc5f2f -r d240724225d90b0571e27c6569a73f9f29f0b6c7 vcweb/static/bootstrap/font/fontawesome-webfont.eot Binary file vcweb/static/bootstrap/font/fontawesome-webfont.eot has changed diff -r ce0dac0feb5919e9997eabe35a6fd182a0dc5f2f -r d240724225d90b0571e27c6569a73f9f29f0b6c7 vcweb/static/bootstrap/font/fontawesome-webfont.svg --- a/vcweb/static/bootstrap/font/fontawesome-webfont.svg +++ b/vcweb/static/bootstrap/font/fontawesome-webfont.svg @@ -53,14 +53,14 @@ <glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /><glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /><glyph unicode="" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h299l-299 299v-299zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544q40 0 88 -20t76 -48l408 -408q28 -28 48 -76t20 -88z" /> -<glyph unicode="" d="M1088 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-384q-13 0 -22.5 9.5t-9.5 22.5v448q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-352h288q13 0 22.5 -9.5t9.5 -22.5zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5 t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5 t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM1024 640q26 0 45 -19t19 -45v-96q0 -26 -19 -45t-45 -19h-416q-26 0 -45 19t-19 45v480q0 26 19 45t45 19h96q26 0 45 -19t19 -45v-320h256z" /><glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1339 729q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39zM1632 512q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-1600q-14 0 -23 9t-9 23v576q0 14 9 23 t23 9h192q14 0 23 -9t9 -23v-352h1152v352q0 14 9 23t23 9h192z" /> -<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-9 -9 -23 -9t-23 9l-320 320q-9 9 -9 23q0 13 9.5 22.5t22.5 9.5h192v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352h192q14 0 23 -9t9 -23zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5 t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5 t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1120 672q0 -13 -9.5 -22.5t-22.5 -9.5h-192v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q9 9 23 9t23 -9l320 -320q9 -9 9 -23zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5 t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> +<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /><glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" /> -<glyph unicode="" d="M1152 640q0 -37 -33 -56l-512 -288q-14 -8 -31 -8t-32 9q-32 18 -32 55v576q0 37 32 55q31 20 63 1l512 -288q33 -19 33 -56zM1280 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5 t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q169 0 304 99.5t185 261.5q7 23 30 23h199 q16 0 25 -12q10 -13 7 -27q-39 -175 -147.5 -312t-266 -213t-336.5 -76q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> +<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /><glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /><glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /><glyph unicode="" horiz-adv-x="1152" d="M704 512q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5q0 -37 19 -67t51 -47l-69 -229q-5 -15 5 -28t26 -13h192q16 0 26 13t5 28l-69 229q32 17 51 47t19 67zM320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68 t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> @@ -70,7 +70,7 @@ <glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /><glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /><glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> -<glyph unicode="" horiz-adv-x="1792" d="M672 1408v-1536h-64v1536h64zM1408 1408v-1536h-64v1536h64zM1568 1408v-1536h-64v1536h64zM576 1408v-1536h-64v1536h64zM1280 1408v-1536h-256v1536h256zM896 1408v-1536h-128v1536h128zM448 1408v-1536h-128v1536h128zM1792 1408v-1536h-128v1536h128zM256 1408v-1536 h-256v1536h256z" /> +<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /><glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" /><glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /><glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> @@ -89,11 +89,11 @@ <glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /><glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /><glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1900 1278q20 -8 20 -30v-1216q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-585 586v-307q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-307l585 586q16 15 35 7z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" /><glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /><glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" /><glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM256 640q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5v1024q-104 0 -198.5 -40.5 t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5z" /> +<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /><glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /><glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /><glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> @@ -115,12 +115,12 @@ <glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" /><glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /><glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M896 160v192q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-192q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1152 832q0 97 -58.5 172t-144.5 111.5t-181 36.5t-181 -36.5t-144.5 -111.5t-58.5 -172v-11v-13t1 -11.5t3 -11.5t5.5 -8t9 -7 t13.5 -2h192q14 0 23 9t9 23q0 12 11 27q19 31 50.5 50t66.5 19q39 0 83 -21.5t44 -57.5q0 -33 -26.5 -58t-63.5 -44t-74.5 -41.5t-64 -63.5t-26.5 -98v-11v-13t1 -11.5t3 -11.5t5.5 -8t9 -7t13.5 -2h192q17 0 24 10.5t8 24.5t13.5 33t37.5 32q60 33 70 39q62 44 98.5 108 t36.5 137zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1024 160v64q0 14 -9 23t-23 9h-96v480q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h96v-384h-96q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 928v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /><glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5... [truncated message content] |
From: <com...@bi...> - 2013-06-05 22:09:23
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/ce0dac0feb59/ Changeset: ce0dac0feb59 User: alllee Date: 2013-06-05 23:59:03 Summary: starting to refactor experimenter round data loading to be async Affected #: 3 files diff -r b7ae158aaa6cf3fc5a2b4deeac13d194c54d0af3 -r ce0dac0feb5919e9997eabe35a6fd182a0dc5f2f vcweb/core/ajax.py --- a/vcweb/core/ajax.py +++ b/vcweb/core/ajax.py @@ -6,7 +6,7 @@ from vcweb.core.decorators import experimenter_required, dajaxice_register from vcweb.core import dumps -from vcweb.core.models import Experiment +from vcweb.core.models import Experiment, RoundData, get_chat_message_parameter import logging logger = logging.getLogger(__name__) @@ -108,6 +108,17 @@ @experimenter_required @dajaxice_register +def get_round_data(request, pk): + round_data = get_object_or_404(RoundData, pk=pk) + group_data_values = [gdv.to_dict(cacheable=True) for gdv in round_data.group_data_value_set.select_related('group', 'parameter').all()] + participant_data_values = [pdv.to_dict(include_email=True, cacheable=True) for pdv in round_data.participant_data_value_set.select_related('participant_group_relationship__participant__user', 'parameter').exclude(parameter=get_chat_message_parameter())] + return dumps({ + 'groupDataValues': group_data_values, + 'participantDataValues': participant_data_values + }) + +@experimenter_required +@dajaxice_register def experiment_controller(request, pk, action=None): experimenter = request.user.experimenter experiment = _get_experiment(request, pk) diff -r b7ae158aaa6cf3fc5a2b4deeac13d194c54d0af3 -r ce0dac0feb5919e9997eabe35a6fd182a0dc5f2f vcweb/core/models.py --- a/vcweb/core/models.py +++ b/vcweb/core/models.py @@ -974,30 +974,30 @@ if self.is_timed_round and self.is_time_expired: self.end_round() -# FIXME: figure out a better way to convert these to json that doesn't involve manual remapping of attribute names... -# or be consistent so that things on the client side are named the same as the server side def all_round_data(self): + # FIXME: figure out a better way to convert these to json that doesn't involve manual remapping of attribute names... + # or be consistent so that things on the client side are named the same as the server side all_round_data = [] - for round_data in self.round_data_set.reverse(): - group_data_values = [gdv.to_dict() for gdv in round_data.group_data_value_set.select_related('group', 'parameter').all()] -# FIXME: do this more efficiently - participant_data_values = [pdv.to_dict(include_email=True, cacheable=True) - for pdv - in round_data.participant_data_value_set.select_related('participant_group_relationship__participant__user', 'parameter').exclude(parameter=get_chat_message_parameter())] + for round_data in self.round_data_set.select_related('round_configuration').reverse(): + # FIXME: grossly inefficient as number of rounds increases + #group_data_values = [gdv.to_dict(cacheable=True) for gdv in round_data.group_data_value_set.select_related('group', 'parameter').all()] + #participant_data_values = [pdv.to_dict(include_email=True, cacheable=True) + # for pdv + # in round_data.participant_data_value_set.select_related('participant_group_relationship__participant__user', 'parameter').exclude(parameter=get_chat_message_parameter())] rc = round_data.round_configuration all_round_data.append({ + 'pk': round_data.pk, 'roundDataId': "roundData_%s" % round_data.pk, 'experimenterNotes': round_data.experimenter_notes, 'roundType': rc.get_round_type_display(), 'roundNumber':rc.round_number, - 'groupDataValues': group_data_values, - 'participantDataValues': participant_data_values }) return all_round_data def to_dict(self, include_round_data=True, default_value_dict=None, attrs=None, *args, **kwargs): ec = self.experiment_configuration - experiment_dict = { + experiment_dict = dict(default_value_dict or {}, **kwargs) + experiment_dict.update({ 'roundStatusLabel': self.status_label, 'roundSequenceLabel': self.sequence_label, 'timeRemaining': self.time_remaining, @@ -1008,14 +1008,14 @@ 'isArchived': self.is_archived, 'exchangeRate': float(ec.exchange_rate), 'readyParticipants': self.number_of_ready_participants, - } + }) if include_round_data: + # FIXME: grossly inefficient, need to rethink this - maybe fetch round data asynchronously instead experiment_dict['allRoundData'] = self.all_round_data() experiment_dict['chatMessages'] = [chat_message.to_dict() for chat_message in self.all_chat_messages] - experiment_dict['messages'] = [str(log) for log in self.activity_log_set.order_by('-date_created')] + experiment_dict['messages'] = map(str, self.activity_log_set.order_by('-date_created')) experiment_dict['experimenterNotes'] = self.current_round_data.experimenter_notes if self.is_round_in_progress else '' - if default_value_dict: - experiment_dict.update(default_value_dict, **kwargs) +# FIXME: remove if unused/unneeded, intended to provide some way to include more experiment attributes at invocation time if attrs: experiment_dict.update([(attr, getattr(self, attr, None)) for attr in attrs]) return experiment_dict diff -r b7ae158aaa6cf3fc5a2b4deeac13d194c54d0af3 -r ce0dac0feb5919e9997eabe35a6fd182a0dc5f2f vcweb/core/templates/experimenter/monitor.html --- a/vcweb/core/templates/experimenter/monitor.html +++ b/vcweb/core/templates/experimenter/monitor.html @@ -157,7 +157,7 @@ data-bind='attr: { href: "#" + roundDataId() }'><span class='label label-success' data-bind='text: roundType'></span>Round <span data-bind='text: roundNumber'></span></a></div> - <div data-bind='attr: { id: roundDataId }' class='accordion-body collapse'> + <div data-bind='click: $root.loadRoundData, attr: { id: roundDataId }' class='accordion-body collapse'><div class='accordion-inner'><div data-bind='if: experimenterNotes'><h4>Experimenter Notes</h4> @@ -253,7 +253,15 @@ model.refresh = function() { console.debug("refreshing page"); window.location.reload(true); - } + }; + model.loadRoundData = function(localModel) { + Dajaxice.vcweb.core.get_round_data(function(data) { + ko.mapping.fromJS(data, localModel); + console.debug("local model is now: "); + console.debug(localModel); + }, + {pk: localModel.pk}); + }; model.update = function(localModel, evt) { $('#progress-modal').modal('show'); Dajaxice.vcweb.core.get_experiment_model(function(data) { Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-05-21 23:45:24
|
2 new commits in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/a9aa4c30ba4a/ Changeset: a9aa4c30ba4a User: RoleeSinha Date: 2013-05-22 01:41:27 Summary: fixing styling Affected #: 1 file diff -r e26ec42a00759ec2c3e1be04cedb377cc3cbba2d -r a9aa4c30ba4a5670dd31ea0200f0a20d535a2dde vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css --- a/vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css +++ b/vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css @@ -77,11 +77,11 @@ color: #4d4d4d /*{a-body-color}*/; } .ui-body-a .ui-link { - color: #42555e /*{a-body-link-color}*/; + color: #5F6E77 /*{a-body-link-color}*/; font-weight: bold; } .ui-body-a .ui-link:visited { - color: #42555e /*{a-body-link-visited}*/; + color: #5F6E77 /*{a-body-link-visited}*/; } .ui-body-a .ui-link:hover { color: #5F6E77 /*{a-body-link-hover}*/; @@ -431,7 +431,7 @@ .ui-bar-d { border: 1px solid #F7F7F7 /*{d-bar-border}*/; background: #F7F7F7 /*{d-bar-background-color}*/; - color: #42555e /*{d-bar-color}*/; + color: #5F6E77 /*{d-bar-color}*/; font-weight: bold; text-shadow: 0 /*{d-bar-shadow-x}*/ 0 /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #ffffff /*{d-bar-shadow-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{d-bar-background-start}*/), to( #f7f7f7 /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ @@ -442,7 +442,7 @@ background-image: linear-gradient( #f7f7f7 /*{d-bar-background-start}*/, #f7f7f7 /*{d-bar-background-end}*/); } .ui-bar-d .ui-link-inherit { - color: #42555e /*{d-bar-color}*/; + color: #5F6E77 /*{d-bar-color}*/; } .ui-bar-d a.ui-link { color: #7cc4e7 /*{d-bar-link-color}*/; @@ -467,7 +467,7 @@ .ui-body-d, .ui-overlay-d { border: 1px solid #F7F7F7 /*{d-body-border}*/; - color: #42555e /*{d-body-color}*/; + color: #5F6E77 /*{d-body-color}*/; text-shadow: 0 /*{d-body-shadow-x}*/ 0 /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ /*{d-body-shadow-color}*/; background: #F7F7F7 /*{d-body-background-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{d-body-background-start}*/), to( #f7f7f7 /*{d-body-background-end}*/)); /* Saf4+, Chrome */ @@ -489,10 +489,10 @@ font-family: sans-serif /*{global-font-family}*/; } .ui-body-d .ui-link-inherit { - color: #42555e /*{d-body-color}*/; + color: #5F6E77 /*{d-body-color}*/; } .ui-body-d .ui-link { - color: #42555e /*{d-body-link-color}*/; + color: #5F6E77 /*{d-body-link-color}*/; font-weight: bold; } .ui-body-d .ui-link:visited { @@ -570,7 +570,7 @@ .ui-bar-e { border: 1px solid #b8b8b8 /*{e-bar-border}*/; background: #F7F7F7 /*{e-bar-background-color}*/; - color: #42555e /*{e-bar-color}*/; + color: #5F6E77 /*{e-bar-color}*/; font-weight: bold; text-shadow: 0 /*{e-bar-shadow-x}*/ 0 /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #ffffff /*{e-bar-shadow-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{e-bar-background-start}*/), to( #f7f7f7 /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ @@ -581,7 +581,7 @@ background-image: linear-gradient( #f7f7f7 /*{e-bar-background-start}*/, #f7f7f7 /*{e-bar-background-end}*/); } .ui-bar-e .ui-link-inherit { - color: #42555e /*{e-bar-color}*/; + color: #5F6E77 /*{e-bar-color}*/; } .ui-bar-e a.ui-link { color: #7cc4e7 /*{e-bar-link-color}*/; @@ -606,7 +606,7 @@ .ui-body-e, .ui-overlay-e { border: 1px solid #F7F7F7 /*{e-body-border}*/; - color: #42555e /*{e-body-color}*/; + color: #5F6E77 /*{e-body-color}*/; text-shadow: 0 /*{e-body-shadow-x}*/ 0 /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ /*{e-body-shadow-color}*/; background: #F7F7F7 /*{e-body-background-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{e-body-background-start}*/), to( #f7f7f7 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ @@ -628,10 +628,10 @@ font-family: sans-serif /*{global-font-family}*/; } .ui-body-e .ui-link-inherit { - color: #42555e /*{e-body-color}*/; + color: #5F6E77 /*{e-body-color}*/; } .ui-body-e .ui-link { - color: #42555e /*{e-body-link-color}*/; + color: #5F6E77 /*{e-body-link-color}*/; font-weight: bold; } .ui-body-e .ui-link:visited { https://bitbucket.org/virtualcommons/vcweb/commits/b7ae158aaa6c/ Changeset: b7ae158aaa6c User: RoleeSinha Date: 2013-05-22 01:44:44 Summary: fixing styling Affected #: 1 file diff -r a9aa4c30ba4a5670dd31ea0200f0a20d535a2dde -r b7ae158aaa6cf3fc5a2b4deeac13d194c54d0af3 vcweb/lighterprints/templates/lighterprints/mobile/index.html --- a/vcweb/lighterprints/templates/lighterprints/mobile/index.html +++ b/vcweb/lighterprints/templates/lighterprints/mobile/index.html @@ -685,7 +685,7 @@ <input type="hidden" name="participant_group_id" value='{{participant_group_relationship.id}}'><input type="text" id="chatText" name="message" placeholder="Send a message to your group"><a href="#" data-theme="a" data-inline="true" data-role="button" data-bind='click: $root.send'>Send</a> - + <div class="ui-body-b"><div data-bind="ifnot: hasChatMessages() " data-inset="true" data-theme="b"> No chat messages have been posted yet. </div> @@ -693,6 +693,7 @@ <ul id="chatMessageList" data-role="listview" data-bind="template: {name:'myTeam-template', foreach: chatMessages}" data-inset="true" style="overflow-y: scroll;height:600px;"></ul></div> + </div></div><div data-role="footer" data-theme="c"><div class="ui-bar-b" style="font-size:15px;text-align:center;"> Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-05-21 23:32:51
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/e26ec42a0075/ Changeset: e26ec42a0075 User: RoleeSinha Date: 2013-05-22 01:32:34 Summary: fixing styling Affected #: 1 file diff -r 51633eeb7e07464a7840ca7f57d7dd60ab08378e -r e26ec42a00759ec2c3e1be04cedb377cc3cbba2d vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css --- a/vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css +++ b/vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css @@ -77,11 +77,11 @@ color: #4d4d4d /*{a-body-color}*/; } .ui-body-a .ui-link { - color: #5F6E77 /*{a-body-link-color}*/; + color: #42555e /*{a-body-link-color}*/; font-weight: bold; } .ui-body-a .ui-link:visited { - color: #5F6E77 /*{a-body-link-visited}*/; + color: #42555e /*{a-body-link-visited}*/; } .ui-body-a .ui-link:hover { color: #5F6E77 /*{a-body-link-hover}*/; @@ -431,7 +431,7 @@ .ui-bar-d { border: 1px solid #F7F7F7 /*{d-bar-border}*/; background: #F7F7F7 /*{d-bar-background-color}*/; - color: #5F6E77 /*{d-bar-color}*/; + color: #42555e /*{d-bar-color}*/; font-weight: bold; text-shadow: 0 /*{d-bar-shadow-x}*/ 0 /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #ffffff /*{d-bar-shadow-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{d-bar-background-start}*/), to( #f7f7f7 /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ @@ -442,7 +442,7 @@ background-image: linear-gradient( #f7f7f7 /*{d-bar-background-start}*/, #f7f7f7 /*{d-bar-background-end}*/); } .ui-bar-d .ui-link-inherit { - color: #5F6E77 /*{d-bar-color}*/; + color: #42555e /*{d-bar-color}*/; } .ui-bar-d a.ui-link { color: #7cc4e7 /*{d-bar-link-color}*/; @@ -467,7 +467,7 @@ .ui-body-d, .ui-overlay-d { border: 1px solid #F7F7F7 /*{d-body-border}*/; - color: #5F6E77 /*{d-body-color}*/; + color: #42555e /*{d-body-color}*/; text-shadow: 0 /*{d-body-shadow-x}*/ 0 /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ /*{d-body-shadow-color}*/; background: #F7F7F7 /*{d-body-background-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{d-body-background-start}*/), to( #f7f7f7 /*{d-body-background-end}*/)); /* Saf4+, Chrome */ @@ -489,10 +489,10 @@ font-family: sans-serif /*{global-font-family}*/; } .ui-body-d .ui-link-inherit { - color: #5F6E77 /*{d-body-color}*/; + color: #42555e /*{d-body-color}*/; } .ui-body-d .ui-link { - color: #5F6E77 /*{d-body-link-color}*/; + color: #42555e /*{d-body-link-color}*/; font-weight: bold; } .ui-body-d .ui-link:visited { @@ -570,7 +570,7 @@ .ui-bar-e { border: 1px solid #b8b8b8 /*{e-bar-border}*/; background: #F7F7F7 /*{e-bar-background-color}*/; - color: #5F6E77 /*{e-bar-color}*/; + color: #42555e /*{e-bar-color}*/; font-weight: bold; text-shadow: 0 /*{e-bar-shadow-x}*/ 0 /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #ffffff /*{e-bar-shadow-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{e-bar-background-start}*/), to( #f7f7f7 /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ @@ -581,7 +581,7 @@ background-image: linear-gradient( #f7f7f7 /*{e-bar-background-start}*/, #f7f7f7 /*{e-bar-background-end}*/); } .ui-bar-e .ui-link-inherit { - color: #5F6E77 /*{e-bar-color}*/; + color: #42555e /*{e-bar-color}*/; } .ui-bar-e a.ui-link { color: #7cc4e7 /*{e-bar-link-color}*/; @@ -606,7 +606,7 @@ .ui-body-e, .ui-overlay-e { border: 1px solid #F7F7F7 /*{e-body-border}*/; - color: #5F6E77 /*{e-body-color}*/; + color: #42555e /*{e-body-color}*/; text-shadow: 0 /*{e-body-shadow-x}*/ 0 /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ /*{e-body-shadow-color}*/; background: #F7F7F7 /*{e-body-background-color}*/; background-image: -webkit-gradient(linear, left top, left bottom, from( #f7f7f7 /*{e-body-background-start}*/), to( #f7f7f7 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ @@ -628,10 +628,10 @@ font-family: sans-serif /*{global-font-family}*/; } .ui-body-e .ui-link-inherit { - color: #5F6E77 /*{e-body-color}*/; + color: #42555e /*{e-body-color}*/; } .ui-body-e .ui-link { - color: #5F6E77 /*{e-body-link-color}*/; + color: #42555e /*{e-body-link-color}*/; font-weight: bold; } .ui-body-e .ui-link:visited { Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-05-21 23:28:56
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/51633eeb7e07/ Changeset: 51633eeb7e07 User: RoleeSinha Date: 2013-05-22 01:28:38 Summary: fixing styling Affected #: 1 file diff -r a15861fb46a7bfba79d166920225a1443aa9af2f -r 51633eeb7e07464a7840ca7f57d7dd60ab08378e vcweb/lighterprints/templates/lighterprints/mobile/index.html --- a/vcweb/lighterprints/templates/lighterprints/mobile/index.html +++ b/vcweb/lighterprints/templates/lighterprints/mobile/index.html @@ -685,15 +685,14 @@ <input type="hidden" name="participant_group_id" value='{{participant_group_relationship.id}}'><input type="text" id="chatText" name="message" placeholder="Send a message to your group"><a href="#" data-theme="a" data-inline="true" data-role="button" data-bind='click: $root.send'>Send</a> - <div class="ui-body-b"> - <div data-bind="ifnot: hasChatMessages() " data-inset="true"> + + <div data-bind="ifnot: hasChatMessages() " data-inset="true" data-theme="b"> No chat messages have been posted yet. </div> - <div data-bind="if: hasChatMessages()"> + <div data-bind="if: hasChatMessages()" data-theme="b"><ul id="chatMessageList" data-role="listview" data-bind="template: {name:'myTeam-template', foreach: chatMessages}" data-inset="true" style="overflow-y: scroll;height:600px;"></ul></div> - </div></div><div data-role="footer" data-theme="c"><div class="ui-bar-b" style="font-size:15px;text-align:center;"> Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-05-21 23:26:32
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/a15861fb46a7/ Changeset: a15861fb46a7 User: RoleeSinha Date: 2013-05-22 01:26:12 Summary: fixing styling Affected #: 1 file diff -r a0e098d2d57488ab04d4c63337e2551541b55ed3 -r a15861fb46a7bfba79d166920225a1443aa9af2f vcweb/lighterprints/templates/lighterprints/mobile/index.html --- a/vcweb/lighterprints/templates/lighterprints/mobile/index.html +++ b/vcweb/lighterprints/templates/lighterprints/mobile/index.html @@ -255,8 +255,8 @@ </script><script type='text/html' id='myTeam-template'><li> - <span style="color:#5c5d5b;">Participant <span data-bind="text: participant_number"></span></span><br><span data-bind="text: value"></span> - <span style="color:#5c5d5b;" class="ui-li-aside" data-bind="text: date_created"></span> + <span style="color:#42555e;">Participant <span data-bind="text: participant_number"></span></span><br><span data-bind="text: value"></span> + <span style="color:#42555e;" class="ui-li-aside" data-bind="text: date_created"></span></li></script><script type='text/html' id='no-group-activity-template'> Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-05-21 23:10:04
|
2 new commits in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/d8f36756b9e0/ Changeset: d8f36756b9e0 User: RoleeSinha Date: 2013-05-22 01:09:30 Summary: fixing styling Affected #: 1 file diff -r da91e164d20df7c82322785ceaf0dfdd4108b572 -r d8f36756b9e01e30b890719fca420f8aaf1047e6 vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css --- a/vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css +++ b/vcweb/lighterprints/static/css/lighterprints/mobile/themeroller.css @@ -993,8 +993,8 @@ /* Button corner class -----------------------------------------------------------------------------------------------------------*/ .ui-btn-corner-all { - -webkit-border-radius: 0em /*{global-radii-buttons}*/; - border-radius: 0em /*{global-radii-buttons}*/; + -webkit-border-radius: 0.5em /*{global-radii-buttons}*/; + border-radius: 0.5em /*{global-radii-buttons}*/; } /* radius clip workaround for cleaning up corner trapping */ .ui-corner-all, https://bitbucket.org/virtualcommons/vcweb/commits/a0e098d2d574/ Changeset: a0e098d2d574 User: RoleeSinha Date: 2013-05-22 01:09:38 Summary: fixing styling Affected #: 1 file diff -r d8f36756b9e01e30b890719fca420f8aaf1047e6 -r a0e098d2d57488ab04d4c63337e2551541b55ed3 vcweb/lighterprints/templates/lighterprints/mobile/index.html --- a/vcweb/lighterprints/templates/lighterprints/mobile/index.html +++ b/vcweb/lighterprints/templates/lighterprints/mobile/index.html @@ -255,8 +255,8 @@ </script><script type='text/html' id='myTeam-template'><li> - <span>Participant <span data-bind="text: participant_number"></span>: <span data-bind="text: value"></span> - <span class="ui-li-aside" data-bind="text: date_created"></span> + <span style="color:#5c5d5b;">Participant <span data-bind="text: participant_number"></span></span><br><span data-bind="text: value"></span> + <span style="color:#5c5d5b;" class="ui-li-aside" data-bind="text: date_created"></span></li></script><script type='text/html' id='no-group-activity-template'> @@ -286,7 +286,7 @@ <div class="ui-bar ui-bar-e" style="height:90px"> Today's Score <br> - <span style="font-size:25px;"><span data-bind="text: averagePoints"></span><span class='icon-leaf lighterprints-green'></span><h1> + <span style="font-size:20px;"><span data-bind="text: averagePoints"></span><span class='icon-leaf lighterprints-green'></span><h1></div></div><div class="ui-block-b"> @@ -306,15 +306,15 @@ <div class="ui-bar ui-bar-e" style="height:90px"> Today's Progress <br> - <span style="font-size:25px;" data-bind="text: averagePoints"></span><big> / </big> - <span style="font-size:25px;" data-bind="text:pointsToNextLevel"></span> + <span style="font-size:20px;" data-bind="text: averagePoints"></span><big> / </big> + <span style="font-size:20px;" data-bind="text:pointsToNextLevel"></span></div></div><div class="ui-block-b"><div class="ui-bar ui-bar-e" style="height:90px"> Time Remaining<br> - <span style="font-size:25px;" data-bind="text: hoursLeft"></span><big> : </big> - <span style="font-size:25px;" data-bind="text: minutesLeft"></span> + <span style="font-size:20px;" data-bind="text: hoursLeft"></span><big> : </big> + <span style="font-size:20px;" data-bind="text: minutesLeft"></span></div></div></div></div> @@ -378,11 +378,9 @@ lighter<strong>footprints</strong></div></div> - <div data-role="popup" id="popupDialog1" data-overlay-theme="a" data-theme="c" class="ui-corner-all"> - <div data-role="header" data-theme="a" class="ui-corner-top"> - <h1 style="white-space: normal;!">Performing Challenge...</h1> - </div> - <div data-role="content" data-theme="d" class="ui-corner-bottom ui-content"> + <div data-role="popup" id="popupDialog1" data-overlay-theme="a" data-theme="c"> + + <div data-role="content" data-theme="a" style="text-align: center;"><div data-bind='with: lastPerformedActivity'><img alt='Lighterprints Activity Badge' data-bind='attr: {src: "/static/images/lighterprints/badges/" + name() + ".png" }'><h3 style="white-space: normal;!">You completed a challenge!</h3> @@ -390,7 +388,7 @@ </p><p style="white-space: normal;!" data-bind='text: summary'></p></div> - <a href="#" data-role="button" data-inline="true" data-rel="back" data-theme="c">Continue</a> + <a href="#" data-role="button" data-inline="true" data-rel="back">DONE</a></div></div></div> @@ -416,7 +414,7 @@ <div class="ui-bar ui-bar-e" style="height:90px"> Today's Score <br> - <span style="font-size:25px;"><span data-bind="text: averagePoints"></span><span class='icon-leaf lighterprints-green'></span><h1> + <span style="font-size:20px;"><span data-bind="text: averagePoints"></span><span class='icon-leaf lighterprints-green'></span><h1></div></div><div class="ui-block-b"> @@ -436,15 +434,15 @@ <div class="ui-bar ui-bar-e" style="height:90px"> Today's Progress <br> - <span style="font-size:25px;" data-bind="text: averagePoints"></span><big> / </big> - <span style="font-size:25px;" data-bind="text:pointsToNextLevel"></span> + <span style="font-size:20px;" data-bind="text: averagePoints"></span><big> / </big> + <span style="font-size:20px;" data-bind="text:pointsToNextLevel"></span></div></div><div class="ui-block-b"><div class="ui-bar ui-bar-e" style="height:90px"> Time Remaining<br> - <span style="font-size:25px;" data-bind="text: hoursLeft"></span><big> : </big> - <span style="font-size:25px;" data-bind="text: minutesLeft"></span> + <span style="font-size:20px;" data-bind="text: hoursLeft"></span><big> : </big> + <span style="font-size:20px;" data-bind="text: minutesLeft"></span></div></div></div></div> @@ -581,19 +579,17 @@ lighter<strong>footprints</strong></div></div> - <div data-role="popup" id="popupDialog3" data-overlay-theme="a" data-theme="c" class="ui-corner-all"> - <div data-role="header" data-theme="a" class="ui-corner-top"> - <h1>Performing Challenge...</h1> - </div> - <div data-role="content" data-theme="d" class="ui-corner-bottom ui-content"> + <div data-role="popup" id="popupDialog3" data-overlay-theme="a" data-theme="c" class="ui-corner-all"> + + <div data-role="content" data-theme="a" style="text-align: center;"><div data-bind='with: lastPerformedActivity'><img alt='Lighterprints Activity Badge' data-bind='attr: {src: "/static/images/lighterprints/badges/" + name() + ".png" }'> - <h3>You completed a challenge!</h3> - <p><strong><em data-bind='text: display_name'></em></strong> for <span class='lighterprints-green' data-bind='text: points'></span><i class='icon-leaf lighterprints-green'></i> + <h3 style="white-space: normal;!">You completed a challenge!</h3> + <p style="white-space: normal;!"><strong><em data-bind='text: display_name'></em></strong> for <span class='lighterprints-green' data-bind='text: points'></span><i class='icon-leaf lighterprints-green'></i></p> - <p data-bind='text: summary'></p> + <p style="white-space: normal;!" data-bind='text: summary'></p></div> - <a href="#" data-role="button" data-inline="true" data-rel="back" data-theme="c">Continue</a> + <a href="#" data-role="button" data-inline="true" data-rel="back">DONE</a></div></div></div> @@ -685,17 +681,16 @@ </div><div data-role="content" data-theme="d"><h4><span class="icon-comment lighterprints-grey"> My Team</span></h4> - <div data-role="fieldcontain"> + <input type="hidden" name="participant_group_id" value='{{participant_group_relationship.id}}'><input type="text" id="chatText" name="message" placeholder="Send a message to your group"><a href="#" data-theme="a" data-inline="true" data-role="button" data-bind='click: $root.send'>Send</a> - </div> - <div class="ui-bar-c"> - <div data-bind="ifnot: hasChatMessages() " data-inset="true" data-theme="d"> + <div class="ui-body-b"> + <div data-bind="ifnot: hasChatMessages() " data-inset="true"> No chat messages have been posted yet. </div><div data-bind="if: hasChatMessages()"> - <ul id="chatMessageList" data-role="listview" data-bind="template: {name:'myTeam-template', foreach: chatMessages}" data-inset="true" style="overflow-y: scroll;height:600px;" data-theme="d"> + <ul id="chatMessageList" data-role="listview" data-bind="template: {name:'myTeam-template', foreach: chatMessages}" data-inset="true" style="overflow-y: scroll;height:600px;"></ul></div></div> @@ -730,17 +725,17 @@ <a href="#defaultpanel6" class="ui-btn-right" data-role="button" data-inline="true" data-iconpos="notext" data-theme="a" data-icon="align-justify"></a></div><div data-role="content" data-theme="d"> - <div class="ui-bar-d" data-inset="true"> + <div class="ui-block-d" data-inset="true"><h4><span class="icon-question lighterprints-grey"> Help</span></h4><h4>Instructions</h4><p> - You have been randomly placed in a group of <strong>5 participants</strong>. + You have been randomly placed in a group of <b>5 participants</b>. In this experiment you can perform virtual actions that represent green alternatives to some common daily activities. Some of these activities are available all day, and others are only available at specific times. You can learn more about them by clicking on the <a href="#challengesPage" style="text-decoration: none;">Challenges tab</a> and selecting an activity. </p> - <h4>Challenges, Green Points, and Levels</h4> + <b>Challenges, Green Points, and Levels</b><p> Each <strong class="text-gold">challenge</strong> is worth a certain number of <strong class="lighterprints-green">green points <span class="icon-leaf"></span></strong>. @@ -758,21 +753,21 @@ In order to reach this target you and a majority of the members of your group must perform high point challenges when they are available. </p> - <h4>How to participate</h4> + <b>How to participate</b><p> - To participate, simply click on the <a href="#challengesPage" style="text-decoration: none;">Challenges tab</a>, and select a challenge you"d like to perform. + To participate, simply click on the <a href="#challengesPage" style="text-decoration: none;">Challenges tab</a>, and select a challenge you'd like to perform. You can leave messages for the other members n your group via the <a href="#myTeamPage" style="text-decoration: none;">My Group tab</a> or use the <a href="#dashboardPage" style="text-decoration: none;">Dashboard</a> - to view your group"s progress. + to view your group's progress. </p> - </div> - <div class="ui-bar-d"> + </div><br> + <div class="ui-body-d"><h4>Frequently Asked Questions</h4><ul data-role="listview" data-inset="true" data-theme="b"><li><h4 style="white-space: normal;!">I performed an activity worth 15 points but only 3 points were added to Today's Progress and Today's Score. Why?</h4><p style="white-space: normal;!"> - The numbers in Today"s Score Today"s Progress represent your group"s <b>average number of earned green points</b>. If there are 5 + The numbers in Today's Score Today's Progress represent your group's <b>average number of earned green points</b>. If there are 5 people in your group, performing a 15 point activity adds 3 points to the group average (15 / 5 = 3). </p></li> @@ -790,7 +785,7 @@ <li><h4 style="white-space: normal;!">I don't have a car or anyone to carpool with, so how can I carpool?</h4><p style="white-space: normal;!"> - You don"t have to actually perform the activity in the real world to click on "perform". These are just + You don't have to actually perform the activity in the real world to click on "perform". These are just virtual challenges for the time being. In the future we plan to allow participants to gain points by actually performing these challenges. </p> Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2013-05-21 00:29:04
|
1 new commit in vcweb: https://bitbucket.org/virtualcommons/vcweb/commits/da91e164d20d/ Changeset: da91e164d20d User: RoleeSinha Date: 2013-05-21 02:28:57 Summary: fixing styling Affected #: 1 file diff -r 2fa80193c5eb1f0f9ebbbc198ca16d2ee5a30562 -r da91e164d20df7c82322785ceaf0dfdd4108b572 vcweb/lighterprints/templates/lighterprints/mobile/index.html --- a/vcweb/lighterprints/templates/lighterprints/mobile/index.html +++ b/vcweb/lighterprints/templates/lighterprints/mobile/index.html @@ -737,7 +737,7 @@ You have been randomly placed in a group of <strong>5 participants</strong>. In this experiment you can perform virtual actions that represent green alternatives to some common daily activities. Some of these activities are available all day, and others are only available at - specific times. You can learn more about them by clicking on the <a href="#challengesPage">Challenges tab</a> + specific times. You can learn more about them by clicking on the <a href="#challengesPage" style="text-decoration: none;">Challenges tab</a> and selecting an activity. </p><h4>Challenges, Green Points, and Levels</h4> @@ -760,9 +760,9 @@ </p><h4>How to participate</h4><p> - To participate, simply click on the <a href="#challengesPage">Challenges tab</a>, and select a challenge you"d like to perform. - You can leave messages for the other members n your group via the <a href="#myTeamPage">My Group tab</a> - or use the <a href="#dashboardPage">Dashboard</a> + To participate, simply click on the <a href="#challengesPage" style="text-decoration: none;">Challenges tab</a>, and select a challenge you"d like to perform. + You can leave messages for the other members n your group via the <a href="#myTeamPage" style="text-decoration: none;">My Group tab</a> + or use the <a href="#dashboardPage" style="text-decoration: none;">Dashboard</a> to view your group"s progress. </p></div> @@ -770,7 +770,7 @@ <h4>Frequently Asked Questions</h4><ul data-role="listview" data-inset="true" data-theme="b"><li> - <h4 style="white-space: normal;!">I performed an activity worth 15 points but only 3 points were added to Today"s Progress and Today's Score. Why?</h4> + <h4 style="white-space: normal;!">I performed an activity worth 15 points but only 3 points were added to Today's Progress and Today's Score. Why?</h4><p style="white-space: normal;!"> The numbers in Today"s Score Today"s Progress represent your group"s <b>average number of earned green points</b>. If there are 5 people in your group, performing a 15 point activity adds 3 points to the group average (15 / 5 = 3). Repository URL: https://bitbucket.org/virtualcommons/vcweb/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |