diff --git a/attract/static/js/tasks.js b/attract/static/js/tasks.js index fed0682..599959b 100644 --- a/attract/static/js/tasks.js +++ b/attract/static/js/tasks.js @@ -1,4 +1,54 @@ -function save_task(task_id, task_url) { +/** + * Shows a task in the #task-details div. + */ +function task_open(task_id, project_url) { + if (task_id === undefined) { + if (console) console.log("task_open(undefined) called."); + return; + } + console.log('before anything'); + + $('#task-list').find('a').removeClass('active'); + $('#task-' + task_id).addClass('active'); + + var task_url = '/attract/' + project_url + '/tasks/' + task_id; + console.log('task_url is ' + task_url); + + $.get(task_url, function(task_data) { + $('#task-details').html(task_data); + }).fail(function(xhr) { + if (console) { + console.log('Error fetching task', task_id, 'from', task_url); + console.log('XHR:', xhr); + } + $('#task-details').html(xhr.responseText); + }); +} + +/** + * Create a task and show it in the #task-details div. + */ +function task_create(shot_id, project_url, task_type) { + var base_url = '/attract/' + project_url + '/tasks/create'; + + if (task_type != undefined) { + base_url += '/' + task_type; + } + + $.post(base_url, function(task_data) { + task_open(task_data.task_id, project_url); + }) + .fail(function(xhr) { + if (console) { + console.log('Error creating task'); + console.log('XHR:', xhr); + } + $('#task-details').html(xhr.responseText); + }); +} + + +function task_save(task_id, task_url) { console.log('Saving task to', task_url); var $form = $('#task-view form'); @@ -19,10 +69,11 @@ function save_task(task_id, task_url) { // Update the task list. // NOTE: this is tightly linked to the HTML of the task list in for_project.jade. $(task + ' span.name').text($form.find("input[name='name']").val()); + $(task + ' span.type').text($form.find("select[name='task_type']").val()); $(task + ' span.status').text($form.find("select[name='status']").val().replace('_', ' ')); - $(task + ' span.status-indicator') - .removeAttr('class') - .addClass('status-indicator ' + $form.find("select[name='status']").val()); + $(task) + .removeClass('col-list-item task-list-item') + .addClass('col-list-item task-list-item status-' + $form.find("select[name='status']").val()); $('#status-bar').text('Saved task. ' + data.time); }) diff --git a/src/styles/_base.sass b/src/styles/_base.sass index 5ad09af..6d04659 100644 --- a/src/styles/_base.sass +++ b/src/styles/_base.sass @@ -1,6 +1,6 @@ body background-color: $color-background - position: fixed + position: absolute top: 0 left: 0 right: 0 diff --git a/src/templates/attract/layout.jade b/src/templates/attract/layout.jade index f4ccb65..4e2df87 100644 --- a/src/templates/attract/layout.jade +++ b/src/templates/attract/layout.jade @@ -22,13 +22,11 @@ html(lang="en") nav.sidebar(role="navigation") dl dd - a(href="") A + a(href="{{ url_for('attract.index') }}") A dd - a(href="") B + a(href="{% if project %}{{ url_for('attract.tasks.perproject.index', project_url=project.url) }}{% else %}{{ url_for('attract.tasks.index') }}{% endif %}") T dd - a(href="") C - dd - a(href="") A + a(href="{% if project %}{{ url_for('attract.shots.perproject.index', project_url=project.url) }}{% else %}{{ url_for('attract.shots.index') }}{% endif %}") S | {% block body %} #col_left @@ -38,5 +36,6 @@ html(lang="en") h1 Right | {% endblock %} + script(src="{{ url_for('static_attract', filename='js/tasks.js') }}", async=true) | {% block footer_scripts %}{% endblock %} diff --git a/src/templates/attract/shots/for_project.jade b/src/templates/attract/shots/for_project.jade index a7e0f76..cdb6dc6 100644 --- a/src/templates/attract/shots/for_project.jade +++ b/src/templates/attract/shots/for_project.jade @@ -1,14 +1,19 @@ | {% extends 'attract/layout.html' %} -| {% block page_title %}Shots for project {{ project.name }}{% endblock %} +| {% block page_title %}Shots - {{ project.name }}{% endblock %} | {% block body %} #col_main - h1 Shots for {{ project.name }} + .col_header.task-list-header + a(href="") Shots ({{ shots | count }}) + a.task-project(href="{{url_for('projects.view', project_url=project.url)}}") {{ project.name }} + + a#task-add(href="javascript:task_create('{{ project.url }}');") + Create Shot + table.table thead tr - td Shot name + td Name | {% for task_type in task_types %} - td {{ task_type or '- other -' }} + td.text-capitalize {{ task_type or 'other' }} | {% endfor %} tbody | {% for shot in shots %} @@ -18,16 +23,20 @@ td | {% for task in tasks_for_shots[shot._id][task_type] %} a( - href="javascript:task_open('{{ task._id }}');", + href="javascript:task_open('{{ task._id }}, {{ project.url }}');", class="status-{{ task.properties.status }}") {{ task.name }} br | {% endfor %} a( - href="javascript:create_task('{{ shot._id }}', '{{ task_type }}');") - | Create task - br + href="javascript:task_create('{{ shot._id }}', '{{ project.url }}', '{{ task_type }}');") + | + Task | {% endfor %} | {% endfor %} + #col_right - h1 Right + .col_header + | Task Details + #status-bar + #task-details + | {% endblock %} diff --git a/src/templates/attract/shots/index.jade b/src/templates/attract/shots/index.jade index 8f55639..cb98ba7 100644 --- a/src/templates/attract/shots/index.jade +++ b/src/templates/attract/shots/index.jade @@ -1,5 +1,5 @@ | {% extends 'attract/layout.html' %} -| {% block page_title %}Attract - Shots{% endblock %} +| {% block page_title %}Shots{% endblock %} | {% block body %} #col_main h1 Attract projects diff --git a/src/templates/attract/tasks/for_project.jade b/src/templates/attract/tasks/for_project.jade index 200dd1a..923475c 100644 --- a/src/templates/attract/tasks/for_project.jade +++ b/src/templates/attract/tasks/for_project.jade @@ -14,72 +14,26 @@ script(src="{{ url_for('static_pillar', filename='assets/js/vendor/jquery.select a(href="") Tasks ({{ tasks | count }}) a.task-project(href="{{url_for('projects.view', project_url=project.url)}}") {{ project.name }} - a#task-add(href="javascript:task_create();") + Create Task + a#task-add(href="javascript:task_create('{{ project.url }}');") + Create Task #task-list.col-list | {% for task in tasks %} //- NOTE: this is tightly linked to the JS in tasks.js. a.col-list-item.task-list-item( id="task-{{task._id}}", - class="status-{{ task.properties.status }}" - href="javascript:task_open('{{ task._id }}');") - span.status-indicator(class="{{ task.properties.status }}") + class="status-{{ task.properties.status }}", + href="javascript:task_open('{{ task._id }}', '{{ project.url }}');") + span.status-indicator span.name {{ task.name }} - span.status {{ task.properties.status | undertitle }} + //- span.status {{ task.properties.status | undertitle }} + span.type {{ task.properties.task_type }} | {% endfor %} #col_right .col_header | Task Details #status-bar #task-details - | {{ tasks | count }} tasks so far. - a(href="javascript:task_create();") Create a new one! -| {% endblock %} - -| {% block footer_scripts %} -script. - /** - * Shows a task in the #task-details div. - */ - function task_open(task_id) { - if (task_id === undefined) { - if (console) console.log("task_open(undefined) called."); - return; - } - - $('#task-list').find('a').removeClass('active'); - $('#task-' + task_id).addClass('active'); - - var base_url = "{{ url_for('attract.tasks.perproject.view_embed_task', project_url=project.url, task_id='TASKID') }}"; - var task_url = base_url.replace("TASKID", task_id); - - $.get(task_url, function(task_data) { - $('#task-details').html(task_data); - }).fail(function(xhr) { - if (console) { - console.log('Error fetching task', task_id, 'from', task_url); - console.log('XHR:', xhr); - } - $('#task-details').html(xhr.responseText); - }); - } - - /** - * Create a task and show it in the #task-details div. - */ - function task_create() { - var base_url = "{{ url_for('attract.tasks.perproject.create_task', project_url=project.url) }}"; - - $.post(base_url, function(task_data) { - - task_open(task_data.task_id); - - }).fail(function(xhr) { - if (console) { - console.log('Error creating task'); - console.log('XHR:', xhr); - } - $('#task-details').html(xhr.responseText); - }); - } + #task-view + | {{ tasks | count }} tasks so far. + a(href="javascript:task_create('{{ project.url }}');") Create a new one! | {% endblock %} diff --git a/src/templates/attract/tasks/view_task_embed.jade b/src/templates/attract/tasks/view_task_embed.jade index 726c6c6..12fa635 100644 --- a/src/templates/attract/tasks/view_task_embed.jade +++ b/src/templates/attract/tasks/view_task_embed.jade @@ -1,12 +1,11 @@ -script(src="{{ url_for('static_attract', filename='js/tasks.js') }}",async=true) #task-view - form(onsubmit="return save_task('{{task._id}}', '{{ url_for('attract.tasks.perproject.save', project_url=project['url'], task_id=task._id) }}')") + form(onsubmit="return task_save('{{task._id}}', '{{ url_for('attract.tasks.perproject.save', project_url=project['url'], task_id=task._id) }}')") .input-transparent-group input.input-transparent.task-name( name="name", type=text, placeholder='Name', - value="{{ task.name|hide_none }}") + value="{{ task.name | hide_none }}") .input-transparent-group textarea.input-transparent( @@ -36,9 +35,11 @@ script(src="{{ url_for('static_attract', filename='js/tasks.js') }}",async=true) | | {% endfor %} + .input-group-separator + .input-transparent-group.select_multiple label Assignees: - select.input-transparent( + select#assignees.input-transparent( name="users", multiple, placeholder="Assigned to" @@ -48,7 +49,15 @@ script(src="{{ url_for('static_attract', filename='js/tasks.js') }}",async=true) | {% endfor %} .input-transparent-group - button.btn.btn-default(type=submit) Save task + button.btn.btn-default.btn-block(type=submit) Save Changes + + +#task-view-feed + | Updated {{ task._updated | pretty_date }} + ul + each _, i in Array(5) + li=i + script. - $("select[name='users']").select2(); + $("#assignees").select2();