* wip
This commit is contained in:
parent
1ef12b3b8c
commit
6965f8e036
|
|
@ -125,6 +125,7 @@ module JamRuby
|
|||
ms
|
||||
end
|
||||
|
||||
# XXX SQL INJECTION
|
||||
def _genres(rel)
|
||||
gids = json[KEY_GENRES]
|
||||
unless gids.blank?
|
||||
|
|
@ -135,11 +136,12 @@ module JamRuby
|
|||
rel
|
||||
end
|
||||
|
||||
# XXX SQL INJECTION
|
||||
def _instruments(rel)
|
||||
unless (instruments = json['instruments']).blank?
|
||||
instsql = "SELECT player_id FROM musicians_instruments WHERE (("
|
||||
instsql += instruments.collect do |inst|
|
||||
"instrument_id = '#{inst['instrument_id']}' AND proficiency_level = #{inst['proficiency_level']}"
|
||||
"instrument_id = '#{inst['id']}' AND proficiency_level = #{inst['level']}"
|
||||
end.join(") OR (")
|
||||
instsql += "))"
|
||||
rel = rel.where("users.id IN (#{instsql})")
|
||||
|
|
@ -357,47 +359,54 @@ module JamRuby
|
|||
return 'Click search button to look for musicians with similar interests, skill levels, etc.'
|
||||
end
|
||||
jj = self.json
|
||||
str = 'Current Search: '
|
||||
str += "Sort = #{SORT_ORDERS[json_value(MusicianSearch::KEY_SORT_ORDER)]}"
|
||||
str = ''
|
||||
if 0 < (val = jj[KEY_INSTRUMENTS]).length
|
||||
str += ", Instruments = "
|
||||
instr_ids = val.collect { |stored_instrument| stored_instrument['id'] }
|
||||
instrs = Instrument.where(["id IN (?)", instr_ids]).order(:description)
|
||||
instrs.each_with_index do |ii, idx|
|
||||
proficiency = val.detect { |stored_instrument| stored_instrument['id'] == ii.id }['level']
|
||||
str += "#{ii.description} / #{INSTRUMENT_PROFICIENCY[proficiency.to_i]}"
|
||||
str += ', ' unless idx==(instrs.length-1)
|
||||
end
|
||||
end
|
||||
|
||||
if (val = jj[KEY_INTERESTS]) != INTEREST_VALS[0]
|
||||
str += "; Interest = #{INTERESTS[val]}"
|
||||
str += ", Interest = #{INTERESTS[val]}"
|
||||
end
|
||||
if (val = jj[KEY_SKILL].to_i) != SKILL_VALS[0]
|
||||
str += "; Skill = #{SKILL_LEVELS[val]}"
|
||||
str += ", Skill = #{SKILL_LEVELS[val]}"
|
||||
end
|
||||
if (val = jj[KEY_STUDIOS].to_i) != STUDIO_COUNTS[0]
|
||||
str += "; Studio Sessions = #{STUDIOS_LABELS[val]}"
|
||||
str += ", Studio Sessions = #{STUDIOS_LABELS[val]}"
|
||||
end
|
||||
if (val = jj[KEY_GIGS].to_i) != GIG_COUNTS[0]
|
||||
str += "; Concert Gigs = #{GIG_LABELS[val]}"
|
||||
str += ", Concert Gigs = #{GIG_LABELS[val]}"
|
||||
end
|
||||
val = jj[KEY_AGES].map(&:to_i)
|
||||
val.sort!
|
||||
if !val.blank?
|
||||
str += "; Ages = "
|
||||
str += ", Ages = "
|
||||
val.each_with_index do |vv, idx|
|
||||
str += "#{AGES[vv]}"
|
||||
str += ', ' unless idx==(val.length-1)
|
||||
end
|
||||
end
|
||||
if 0 < (val = jj[KEY_GENRES]).length
|
||||
str += "; Genres = "
|
||||
str += ", Genres = "
|
||||
genres = Genre.where(["id IN (?)", val]).order('description').pluck(:description)
|
||||
genres.each_with_index do |gg, idx|
|
||||
str += "#{gg}"
|
||||
str += ', ' unless idx==(genres.length-1)
|
||||
end
|
||||
end
|
||||
if 0 < (val = jj[KEY_INSTRUMENTS]).length
|
||||
str += "; Instruments = "
|
||||
instr_ids = val.collect { |vv| vv['instrument_id'] }
|
||||
instrs = Instrument.where(["id IN (?)", instr_ids]).order(:description)
|
||||
instrs.each_with_index do |ii, idx|
|
||||
proficiency = val.detect { |vv| vv['instrument_id'] == ii.id }['proficiency_level']
|
||||
str += "#{ii.description} (#{INSTRUMENT_PROFICIENCY[proficiency.to_i]})"
|
||||
str += ', ' unless idx==(instrs.length-1)
|
||||
end
|
||||
str += ", Sort = #{SORT_ORDERS[json_value(MusicianSearch::KEY_SORT_ORDER)]}"
|
||||
|
||||
if str.start_with?(', ')
|
||||
# trim off any leading ,
|
||||
str = str[2..-1]
|
||||
end
|
||||
str = 'Current Search: ' + str
|
||||
str
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@
|
|||
rest.getLinks(type)
|
||||
.done(populateLinkTable)
|
||||
.fail(function() {
|
||||
app.notify({message: 'Unable to fetch links. Please try again later.' })
|
||||
app.notify({text: 'Unable to fetch links. Please try again later.' })
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
var rest = new context.JK.Rest();
|
||||
var _instruments = []; // will be list of structs: [ {label:xxx, value:yyy}, {...}, ... ]
|
||||
var _rsvp = false;
|
||||
var _noICheck = false;
|
||||
if (typeof(_parentSelector)=="undefined") {_parentSelector=null}
|
||||
var _parentSelector = parentSelector;
|
||||
var deferredInstruments = null;
|
||||
|
|
@ -100,7 +101,7 @@
|
|||
selectedInstruments.push({id: id, name: name, level: level});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
return selectedInstruments;
|
||||
}
|
||||
|
||||
|
|
@ -109,13 +110,15 @@
|
|||
return;
|
||||
}
|
||||
$.each(instrumentList, function (index, value) {
|
||||
$('input[type="checkbox"][session-instrument-id="' + value.id + '"]')
|
||||
var $item = $('input[type="checkbox"][session-instrument-id="' + value.id + '"]')
|
||||
.attr('checked', 'checked')
|
||||
.iCheck({
|
||||
if(!_noICheck) {
|
||||
$item.iCheck({
|
||||
checkboxClass: 'icheckbox_minimal',
|
||||
radioClass: 'iradio_minimal',
|
||||
inheritClass: true
|
||||
});
|
||||
})
|
||||
}
|
||||
if (_rsvp) {
|
||||
$('select[session-instrument-id="' + value.id + '"].rsvp-count', _parentSelector).val(value.count);
|
||||
$('select[session-instrument-id="' + value.id + '"].rsvp-level', _parentSelector).val(value.level);
|
||||
|
|
@ -126,8 +129,9 @@
|
|||
});
|
||||
}
|
||||
|
||||
function initialize(rsvp) {
|
||||
function initialize(rsvp, noICheck) {
|
||||
_rsvp = rsvp;
|
||||
_noICheck = noICheck;
|
||||
// XXX; _instruments should be populated in a template, rather than round-trip to server
|
||||
if(!context.JK.InstrumentSelectorDeferred) {
|
||||
// this dance is to make sure there is only one server request instead of InstrumentSelector instances *
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
@isSearching = false
|
||||
@pageNumber = 1
|
||||
@instrument_logo_map = context.JK.getInstrumentIconMap24()
|
||||
@instrumentSelector = null
|
||||
|
||||
init: (app) =>
|
||||
@app = app
|
||||
|
|
@ -23,14 +24,18 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
@screen = $('#musicians-screen')
|
||||
@resultsListContainer = @screen.find('#musician-search-filter-results-list')
|
||||
@spinner = @screen.find('.paginate-wait')
|
||||
@instrumentSelector = new context.JK.InstrumentSelector(JK.app)
|
||||
@instrumentSelector.initialize(false, true)
|
||||
|
||||
this.registerResultsPagination()
|
||||
|
||||
@screen.find('#btn-musician-search-builder').on 'click', =>
|
||||
this.showBuilder()
|
||||
false
|
||||
|
||||
@screen.find('#btn-musician-search-reset').on 'click', =>
|
||||
this.resetFilter()
|
||||
false
|
||||
|
||||
afterShow: () =>
|
||||
@screen.find('#musician-search-filter-results').show()
|
||||
|
|
@ -64,9 +69,11 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
|
||||
@screen.find('#btn-perform-musician-search').on 'click', =>
|
||||
this.performSearch()
|
||||
false
|
||||
|
||||
@screen.find('#btn-musician-search-cancel').on 'click', =>
|
||||
this.cancelFilter()
|
||||
false
|
||||
|
||||
this._populateSkill()
|
||||
this._populateStudio()
|
||||
|
|
@ -86,15 +93,16 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
blankOption = $ '<option value=""></option>'
|
||||
blankOption.text label
|
||||
blankOption.attr 'value', value
|
||||
blankOption.attr 'selected', '' if value == selection
|
||||
element.append(blankOption)
|
||||
element.val(selection)
|
||||
context.JK.dropdown(element)
|
||||
|
||||
_populateSelectIdentifier: (identifier) =>
|
||||
elem = $ '#musician-search-filter-builder select[name='+identifier+']'
|
||||
struct = gon.musician_search_meta[identifier]['map']
|
||||
keys = gon.musician_search_meta[identifier]['keys']
|
||||
this._populateSelectWithKeys(struct, @searchFilter[identifier], keys, elem)
|
||||
console.log("@searchFilter", @searchFilter, identifier)
|
||||
this._populateSelectWithKeys(struct, @searchFilter.data_blob[identifier], keys, elem)
|
||||
|
||||
_populateSelectWithInt: (sourceStruct, selection, element) =>
|
||||
struct =
|
||||
|
|
@ -125,24 +133,23 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
ages_map = gon.musician_search_meta['ages']['map']
|
||||
$.each gon.musician_search_meta['ages']['keys'], (index, key) =>
|
||||
ageTemplate = @screen.find('#template-search-filter-setup-ages').html()
|
||||
selected = ''
|
||||
ageLabel = ages_map[key]
|
||||
if 0 < @searchFilter.data_blob.ages.length
|
||||
key_val = key.toString()
|
||||
ageMatch = $.grep(@searchFilter.data_blob.ages, (n, i) ->
|
||||
n == key_val)
|
||||
selected = 'checked' if ageMatch.length > 0
|
||||
ageHtml = context.JK.fillTemplate(ageTemplate,
|
||||
id: key
|
||||
ageHtml = context._.template(ageTemplate,
|
||||
{ id: key
|
||||
description: ageLabel
|
||||
checked: selected)
|
||||
checked: selected},
|
||||
{variable: 'data'})
|
||||
@screen.find('#search-filter-ages').append ageHtml
|
||||
|
||||
_populateGenres: () =>
|
||||
@screen.find('#search-filter-genres').empty()
|
||||
@rest.getGenres().done (genres) =>
|
||||
genreTemplate = @screen.find('#template-search-filter-setup-genres').html()
|
||||
selected = ''
|
||||
$.each genres, (index, genre) =>
|
||||
if 0 < @searchFilter.data_blob.genres.length
|
||||
genreMatch = $.grep(@searchFilter.data_blob.genres, (n, i) ->
|
||||
|
|
@ -150,35 +157,19 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
else
|
||||
genreMatch = []
|
||||
selected = 'checked' if genreMatch.length > 0
|
||||
genreHtml = context.JK.fillTemplate(genreTemplate,
|
||||
id: genre.id
|
||||
genreHtml = context._.template(genreTemplate,
|
||||
{ id: genre.id
|
||||
description: genre.description
|
||||
checked: selected)
|
||||
checked: selected },
|
||||
{ variable: 'data' })
|
||||
@screen.find('#search-filter-genres').append genreHtml
|
||||
|
||||
_populateInstruments: () =>
|
||||
@screen.find('#search-filter-instruments').empty()
|
||||
@rest.getInstruments().done (instruments) =>
|
||||
$.each instruments, (index, instrument) =>
|
||||
instrumentTemplate = @screen.find('#template-search-filter-setup-instrument').html()
|
||||
selected = ''
|
||||
proficiency = '1'
|
||||
if 0 < @searchFilter.data_blob.instruments.length
|
||||
instMatch = $.grep(@searchFilter.data_blob.instruments, (inst, i) ->
|
||||
yn = inst.instrument_id == instrument.id
|
||||
proficiency = inst.proficiency_level if yn
|
||||
yn)
|
||||
selected = 'checked' if instMatch.length > 0
|
||||
instrumentHtml = context.JK.fillTemplate(instrumentTemplate,
|
||||
id: instrument.id
|
||||
description: instrument.description
|
||||
checked: selected)
|
||||
@screen.find('#search-filter-instruments').append instrumentHtml
|
||||
profsel = '#search-filter-instruments tr[data-instrument-id="'+instrument.id+'"] select'
|
||||
jprofsel = @screen.find(profsel)
|
||||
jprofsel.val(proficiency)
|
||||
context.JK.dropdown(jprofsel)
|
||||
return true
|
||||
|
||||
# TODO hydrate user's selection from json_store
|
||||
@instrumentSelector.render(@screen.find('.session-instrumentlist'), [])
|
||||
@instrumentSelector.setSelectedInstruments(@searchFilter.data_blob.instruments)
|
||||
|
||||
|
||||
_builderSelectValue: (identifier) =>
|
||||
elem = $ '#musician-search-filter-builder select[name='+identifier+']'
|
||||
|
|
@ -188,12 +179,7 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
vals = []
|
||||
elem = $ '#search-filter-'+identifier+' input[type=checkbox]:checked'
|
||||
if 'instruments' == identifier
|
||||
elem.each (idx) ->
|
||||
row = $(this).parent().parent()
|
||||
instrument =
|
||||
instrument_id: row.data('instrument-id')
|
||||
proficiency_level: row.find('select').val()
|
||||
vals.push instrument
|
||||
vals = @instrumentSelector.getSelectedInstruments()
|
||||
else
|
||||
elem.each (idx) ->
|
||||
vals.push $(this).val()
|
||||
|
|
@ -231,19 +217,21 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
|
||||
performSearch: () =>
|
||||
if this.willSearch(true)
|
||||
filter = {}
|
||||
$.each gon.musician_search_meta.filter_keys.single, (index, key) =>
|
||||
@searchFilter[key] = this._builderSelectValue(key)
|
||||
filter[key] = this._builderSelectValue(key)
|
||||
$.each gon.musician_search_meta.filter_keys.multi, (index, key) =>
|
||||
@searchFilter[key] = this._builderSelectMultiValue(key)
|
||||
@rest.postMusicianSearchFilter({ filter: JSON.stringify(@searchFilter.data_blob), page: @pageNumber }).done(this.didSearch)
|
||||
filter[key] = this._builderSelectMultiValue(key)
|
||||
@rest.postMusicianSearchFilter({ filter: JSON.stringify(filter), page: @pageNumber }).done(this.didSearch)
|
||||
|
||||
renderResultsHeader: () =>
|
||||
@screen.find('#musician-search-filter-description').html(@searchResults.description)
|
||||
if @searchResults.is_blank_filter
|
||||
@screen.find('#btn-musician-search-reset').hide()
|
||||
@screen.find('.musician-search-text').text('Click search button to look for musicians with similar interests, skill levels, etc.')
|
||||
else
|
||||
@screen.find('#btn-musician-search-reset').show()
|
||||
|
||||
@screen.find('.musician-search-text').text(@searchResults.summary)
|
||||
|
||||
renderMusicians: () =>
|
||||
this.renderResultsHeader() if @pageNumber == 1
|
||||
musicians = @searchResults.musicians
|
||||
|
|
@ -338,20 +326,25 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
@screen.find('.search-m-message').on 'click', (evt) ->
|
||||
userId = $(this).parent().data('musician-id')
|
||||
objThis.app.layout.showDialog 'text-message', d1: userId
|
||||
return false
|
||||
|
||||
|
||||
_bindFriendMusician: () =>
|
||||
objThis = this
|
||||
@screen.find('.search-m-friend').on 'click', (evt) ->
|
||||
@screen.find('.search-m-friend').on 'click', (evt) =>
|
||||
# if the musician is already a friend, remove the button-orange class, and prevent the link from working
|
||||
if 0 == $(this).closest('.button-orange').size()
|
||||
$self = $(evt.target)
|
||||
if 0 == $self.closest('.button-orange').size()
|
||||
return false
|
||||
$(this).click (ee) ->
|
||||
logger.debug("evt.target", evt.target)
|
||||
$self.click (ee) ->
|
||||
ee.preventDefault()
|
||||
return
|
||||
return false
|
||||
evt.stopPropagation()
|
||||
uid = $(this).parent().data('musician-id')
|
||||
uid = $self.parent().data('musician-id')
|
||||
objThis.rest.sendFriendRequest objThis.app, uid, this.friendRequestCallback
|
||||
@app.notify({text: 'A friend request has been sent.'})
|
||||
return false
|
||||
|
||||
_bindFollowMusician: () =>
|
||||
objThis = this
|
||||
|
|
@ -361,7 +354,7 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
return false
|
||||
$(this).click (ee) ->
|
||||
ee.preventDefault()
|
||||
return
|
||||
return false
|
||||
evt.stopPropagation()
|
||||
newFollowing = {}
|
||||
newFollowing.user_id = $(this).parent().data('musician-id')
|
||||
|
|
@ -377,8 +370,9 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
# remove the orange look to indicate it's not selectable
|
||||
# @FIXME -- this will need to be tweaked when we allow unfollowing
|
||||
objThis.screen.find('div[data-musician-id=' + newFollowing.user_id + '] .search-m-follow').removeClass('button-orange').addClass 'button-grey'
|
||||
return
|
||||
return false
|
||||
error: objThis.app.ajaxError
|
||||
return false
|
||||
|
||||
_formatLocation: (musician) ->
|
||||
if musician.city and musician.state
|
||||
|
|
@ -394,6 +388,7 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter
|
|||
# TODO:
|
||||
|
||||
paginate: () =>
|
||||
|
||||
if @pageNumber < @searchResults.page_count && this.willSearch(false)
|
||||
@screen.find('.paginate-wait').show()
|
||||
@pageNumber += 1
|
||||
|
|
|
|||
|
|
@ -59,19 +59,17 @@
|
|||
|
||||
profileUtils.gigMap = {
|
||||
"": "not specified",
|
||||
"0": "zero",
|
||||
"1": "under 10",
|
||||
"2": "10 to 50",
|
||||
"3": "50 to 100",
|
||||
"4": "over 100"
|
||||
"0": "under 10",
|
||||
"1": "10 to 50",
|
||||
"2": "50 to 100",
|
||||
"3": "over 100"
|
||||
};
|
||||
|
||||
profileUtils.studioMap = {
|
||||
"0": "zero",
|
||||
"1": "under 10",
|
||||
"2": "10 to 50",
|
||||
"3": "50 to 100",
|
||||
"4": "over 100"
|
||||
"0": "under 10",
|
||||
"1": "10 to 50",
|
||||
"2": "50 to 100",
|
||||
"3": "over 100"
|
||||
};
|
||||
|
||||
profileUtils.cowritingPurposeMap = {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,39 @@
|
|||
}
|
||||
}
|
||||
|
||||
.field > label {
|
||||
margin-bottom:5px;
|
||||
}
|
||||
.session-instrumentlist {
|
||||
padding: 10px;
|
||||
height: 100px;
|
||||
background-color: #c5c5c5;
|
||||
border: none;
|
||||
-webkit-box-shadow: inset 2px 2px 3px 0px #888;
|
||||
box-shadow: inset 2px 2px 3px 0px #888;
|
||||
color: #000;
|
||||
overflow: auto;
|
||||
font-size: 14px;
|
||||
@include border_box_sizing;
|
||||
|
||||
select, .easydropdown {
|
||||
@include flat_dropdown;
|
||||
@include no_top_padding_dropdown;
|
||||
|
||||
.selected {
|
||||
font-size:13px;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-container {
|
||||
@include white_dropdown;
|
||||
}
|
||||
|
||||
label {
|
||||
display:inline;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-refresh-holder {
|
||||
float:right;
|
||||
margin-right:10px;
|
||||
|
|
@ -39,6 +72,11 @@
|
|||
|
||||
.musician-stats {
|
||||
margin-top:10px;
|
||||
img {
|
||||
position: relative;
|
||||
top: 2px;
|
||||
left: 1px;
|
||||
}
|
||||
}
|
||||
.musician-info {
|
||||
margin-top: 12px;
|
||||
|
|
@ -147,6 +185,35 @@
|
|||
background-color: #4C4C4C;
|
||||
}
|
||||
|
||||
#search-filter-genres, #search-filter-ages {
|
||||
background-color:$ColorTextBoxBackground;
|
||||
height:150px;
|
||||
overflow:auto;
|
||||
padding:10px;
|
||||
width:100%;
|
||||
@include border_box_sizing;
|
||||
|
||||
label {
|
||||
display:inline;
|
||||
color:black;
|
||||
margin-left: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
#search-filter-ages {
|
||||
height:85px;
|
||||
width:75%;
|
||||
}
|
||||
|
||||
.genre-option, .age-option {
|
||||
font-size:14px;
|
||||
margin:0 0 5px 0;
|
||||
}
|
||||
|
||||
#btn-perform-musician-search {
|
||||
margin-right:0;
|
||||
}
|
||||
|
||||
#btn-musician-search-builder {
|
||||
float: left;
|
||||
}
|
||||
|
|
@ -154,6 +221,10 @@
|
|||
float:left;
|
||||
font-size:12px;
|
||||
margin-top:4px;
|
||||
white-space: nowrap;
|
||||
width: calc(100% - 180px);
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#musician-search-filter-description {
|
||||
|
|
@ -181,17 +252,26 @@
|
|||
}
|
||||
|
||||
.col-left {
|
||||
@include border_box_sizing;
|
||||
float: left;
|
||||
width: 50%;
|
||||
width: 33%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.col-right {
|
||||
float: right;
|
||||
width: 50%;
|
||||
width: 67%;
|
||||
@include border_box_sizing;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
.col-left {
|
||||
width: 50%;
|
||||
}
|
||||
.col-right {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.builder-section {
|
||||
|
|
@ -202,18 +282,20 @@
|
|||
float: right;
|
||||
}
|
||||
.band-setup-genres {
|
||||
width: 80%;
|
||||
width: 80% !important;
|
||||
}
|
||||
.easydropdown-wrapper {
|
||||
width: 80%;
|
||||
}
|
||||
.builder-sort-order {
|
||||
padding-right:13.5%;
|
||||
text-align: right;
|
||||
.easydropdown-wrapper {
|
||||
width: 140px;
|
||||
vertical-align:middle;
|
||||
}
|
||||
.text-label {
|
||||
vertical-align: top;
|
||||
vertical-align: middle;
|
||||
margin-right: 5px;
|
||||
display: inline;
|
||||
line-height: 2em;
|
||||
|
|
@ -233,7 +315,10 @@
|
|||
margin-top: 10px;
|
||||
}
|
||||
.builder-action-buttons {
|
||||
margin-top: 20px;
|
||||
margin-top: 20px;
|
||||
.col-right {
|
||||
padding-right:13.5%;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,11 @@ if @search.is_a?(MusicianSearch)
|
|||
node :filter_json do |foo|
|
||||
@search.to_json
|
||||
end
|
||||
|
||||
|
||||
node :summary do |foo|
|
||||
@search.description
|
||||
end
|
||||
|
||||
child(:results => :musicians) {
|
||||
attributes :id, :first_name, :last_name, :name, :city, :state, :country, :online, :musician, :photo_url, :biography, :regionname, :score, :full_score
|
||||
|
||||
|
|
|
|||
|
|
@ -22,51 +22,51 @@ script#template-musician-search-filter type="text/template"
|
|||
.col-left
|
||||
h2 search musicians
|
||||
.col-right.builder-sort-order
|
||||
.text-label Sort Results By:
|
||||
select.easydropdown name="sort_order"
|
||||
option selected="selected" value="{sort_order}" {sort_order}
|
||||
.text-label Sort Results By:
|
||||
select.easydropdown name="sort_order"
|
||||
option selected="selected" value="{sort_order}" {sort_order}
|
||||
.clearall
|
||||
|
||||
#musician-search-filter-builder-middle.builder-section
|
||||
.col-left
|
||||
.field
|
||||
label for="search-filter-genres" Genres:
|
||||
label for="search-filter-genres" Genres
|
||||
.search-filter-setup-genres.band-setup-genres
|
||||
table#search-filter-genres cellpadding="10" cellspacing="6" width="100%"
|
||||
#search-filter-genres
|
||||
|
||||
.field.builder-selector
|
||||
label Interests:
|
||||
label Interests
|
||||
select.easydropdown name="interests"
|
||||
option selected="selected" value="{interests}" {interests}
|
||||
|
||||
.field.builder-selector
|
||||
label Studio Sessions Played:
|
||||
label Studio Sessions Played
|
||||
select.easydropdown name="studio_sessions"
|
||||
option selected="selected" value="{studio_sessions}" {studio_sessions}
|
||||
|
||||
.col-right
|
||||
.field
|
||||
label for="search-filter-instruments"
|
||||
| Instruments & Skill Level:
|
||||
.search-filter-setup-instruments.band-setup-genres.builder-instruments
|
||||
| Instruments & Skill Level
|
||||
.search-filter-setup-instruments.band-setup-genres.builder-instruments.session-instrumentlist
|
||||
table#search-filter-instruments cellpadding="10" cellspacing="6" width="100%"
|
||||
|
||||
.col-left
|
||||
.field.builder-selector
|
||||
label Status:
|
||||
label Status
|
||||
select.easydropdown name="skill_level"
|
||||
option selected="selected" value="{skill_level}" {skill_label}
|
||||
|
||||
.field.builder-selector
|
||||
label Concert Gigs Played:
|
||||
label Concert Gigs Played
|
||||
select.easydropdown name="concert_gigs"
|
||||
option selected="selected" value="{concert_gigs}" {concert_gigs}
|
||||
|
||||
.col-right
|
||||
.field.builder-selector
|
||||
label for="search-filter-ages" Ages:
|
||||
label for="search-filter-ages" Ages
|
||||
.search-filter-setup-ages.band-setup-genres.builder-ages
|
||||
table#search-filter-ages cellpadding="10" cellspacing="6" width="100%"
|
||||
#search-filter-ages
|
||||
.clearall
|
||||
|
||||
.clearall
|
||||
|
|
@ -85,13 +85,25 @@ script#template-search-filter-setup-instrument type="text/template"
|
|||
option value="2" Intermediate
|
||||
option value="3" Expert
|
||||
|
||||
script#template-search-filter-setup-genres type="text/template"
|
||||
tr
|
||||
td <input value="{id}" {checked} type="checkbox" />{description}
|
||||
script#template-search-filter-setup-genres type="text/template"
|
||||
.genre-option
|
||||
| {% if(data.checked) { %}
|
||||
input value="{{data.id}}" checked="checked" type="checkbox"
|
||||
| {% } else { %}
|
||||
input value="{{data.id}}" type="checkbox"
|
||||
| {% } %}
|
||||
label
|
||||
| {{data.description}}
|
||||
|
||||
script#template-search-filter-setup-ages type="text/template"
|
||||
tr
|
||||
td <input value="{id}" {checked} type="checkbox" />{description}
|
||||
script#template-search-filter-setup-ages type="text/template"
|
||||
.age-option
|
||||
| {% if(data.checked) { %}
|
||||
input value="{{data.id}}" checked="checked" type="checkbox"
|
||||
| {% } else { %}
|
||||
input value="{{data.id}}" type="checkbox"
|
||||
| {% } %}
|
||||
label
|
||||
| {{data.description}}
|
||||
|
||||
/! Session Row Template
|
||||
script#template-search-musician-row type="text/template"
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ cp ../ruby/jam_ruby-${GEM_VERSION}.gem vendor/cache/ || { echo "unable to copy j
|
|||
cp ../websocket-gateway/jam_websockets-${GEM_VERSION}.gem vendor/cache/ || { echo "unable to copy websocket-gateway gem"; exit 1; }
|
||||
|
||||
echo "updating dependencies"
|
||||
bundle install
|
||||
bundle install --path vendor/bundle
|
||||
#bundle update
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ describe "Musician Search", :js => true, :type => :feature, :capybara_feature =>
|
|||
end
|
||||
|
||||
it "shows latency information correctly" do
|
||||
pending "hover isn't working reliably in poltergeist"
|
||||
|
||||
# this will try to show 5 latency badges. unknown, good, fair, poor, unacceptable. 'me' does not happen on this screen
|
||||
austin_user.last_jam_locidispid = austin[:locidispid]
|
||||
austin_user.save!
|
||||
|
|
@ -65,10 +67,18 @@ describe "Musician Search", :js => true, :type => :feature, :capybara_feature =>
|
|||
|
||||
miami_user.touch # no scores, but should still show
|
||||
seattle_user.touch # no scores, but should still show
|
||||
wait_for_easydropdown('#musician_order_by')
|
||||
jk_select('Distance', '#musician_order_by')
|
||||
|
||||
find(".musician-list-result[data-musician-id='#{dallas_user.id}']:nth-child(1)") # only dallas is within range
|
||||
# show search screen
|
||||
find('#btn-musician-search-builder').trigger(:click)
|
||||
wait_for_easydropdown('.builder-sort-order select')
|
||||
jk_select('Distance', '.builder-sort-order select')
|
||||
# accept search options
|
||||
find('#btn-perform-musician-search').trigger(:click)
|
||||
|
||||
# only dallas is within range
|
||||
find(".musician-list-result[data-musician-id='#{dallas_user.id}']:nth-child(1)")
|
||||
|
||||
=begin
|
||||
|
||||
find('#musician-change-filter-city').trigger(:click)
|
||||
|
||||
|
|
@ -87,6 +97,7 @@ describe "Musician Search", :js => true, :type => :feature, :capybara_feature =>
|
|||
find('#musician-filter-city', text: "Miami, FL")
|
||||
|
||||
find(".musician-list-result[data-musician-id='#{miami_user.id}']:nth-child(1)") # only miami is within range
|
||||
=end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue