pact_broker 2.18.0 → 2.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/CHANGELOG.md +21 -0
- data/README.md +5 -2
- data/example/example_data.sql +2 -0
- data/lib/pact_broker/api.rb +5 -0
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +8 -0
- data/lib/pact_broker/api/decorators/provider_pacts_decorator.rb +12 -7
- data/lib/pact_broker/api/pact_broker_urls.rb +4 -0
- data/lib/pact_broker/api/resources/badge.rb +3 -1
- data/lib/pact_broker/api/resources/error_handler.rb +5 -1
- data/lib/pact_broker/api/resources/error_test.rb +2 -2
- data/lib/pact_broker/api/resources/index.rb +13 -1
- data/lib/pact_broker/api/resources/latest_provider_pacts.rb +7 -19
- data/lib/pact_broker/api/resources/pact_content_diff.rb +14 -2
- data/lib/pact_broker/api/resources/pact_version.rb +13 -0
- data/lib/pact_broker/api/resources/provider_pacts.rb +45 -0
- data/lib/pact_broker/api/resources/version.rb +1 -1
- data/lib/pact_broker/domain/verification.rb +1 -2
- data/lib/pact_broker/error.rb +1 -0
- data/lib/pact_broker/matrix/repository.rb +39 -28
- data/lib/pact_broker/matrix/service.rb +2 -6
- data/lib/pact_broker/pacts/diff.rb +24 -13
- data/lib/pact_broker/pacts/pact_params.rb +10 -0
- data/lib/pact_broker/pacts/repository.rb +18 -0
- data/lib/pact_broker/pacts/service.rb +4 -0
- data/lib/pact_broker/pacts/sort_verifiable_content.rb +41 -0
- data/lib/pact_broker/ui/controllers/error_test.rb +1 -1
- data/lib/pact_broker/ui/controllers/matrix.rb +5 -6
- data/lib/pact_broker/ui/views/matrix/show.haml +15 -17
- data/lib/pact_broker/verifications/repository.rb +3 -3
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/repository.rb +11 -1
- data/lib/pact_broker/versions/service.rb +2 -2
- data/public/javascripts/matrix.js +40 -33
- data/spec/features/get_pact_version.rb +13 -0
- data/spec/features/get_provider_pacts_spec.rb +33 -12
- data/spec/lib/pact_broker/api/decorators/pacticipant_decorator_spec.rb +12 -1
- data/spec/lib/pact_broker/api/decorators/provider_pacts_decorator_spec.rb +57 -0
- data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +16 -0
- data/spec/lib/pact_broker/api/resources/badge_spec.rb +3 -3
- data/spec/lib/pact_broker/api/resources/error_handler_spec.rb +19 -1
- data/spec/lib/pact_broker/api/resources/latest_provider_pacts_spec.rb +52 -0
- data/spec/lib/pact_broker/api/resources/provider_pacts_spec.rb +75 -0
- data/spec/lib/pact_broker/matrix/repository_spec.rb +52 -0
- data/spec/lib/pact_broker/matrix/service_spec.rb +1 -17
- data/spec/lib/pact_broker/pacts/diff_spec.rb +34 -7
- data/spec/lib/pact_broker/pacts/pact_params_spec.rb +33 -8
- data/spec/lib/pact_broker/pacts/repository_spec.rb +65 -1
- data/spec/lib/pact_broker/pacts/sort_verifiable_content_spec.rb +25 -0
- data/spec/lib/pact_broker/verifications/repository_spec.rb +44 -17
- data/spec/lib/pact_broker/versions/repository_spec.rb +2 -2
- data/spec/support/test_data_builder.rb +4 -0
- data/tasks/rspec.rake +6 -4
- metadata +17 -2
@@ -57,11 +57,7 @@ module PactBroker
|
|
57
57
|
error_messages << "Please specify the pacticipant name"
|
58
58
|
else
|
59
59
|
if s.key?(:pacticipant_version_number) && s.key?(:latest)
|
60
|
-
error_messages << "A version and latest flag cannot both be specified for #{s[:pacticipant_name]}"
|
61
|
-
end
|
62
|
-
|
63
|
-
if s.key?(:tag) && !s.key?(:latest)
|
64
|
-
error_messages << "Querying for all versions with a tag is not currently supported. The latest=true flag must be specified when a tag is given."
|
60
|
+
error_messages << "A version number and latest flag cannot both be specified for #{s[:pacticipant_name]}"
|
65
61
|
end
|
66
62
|
end
|
67
63
|
end
|
@@ -78,7 +74,7 @@ module PactBroker
|
|
78
74
|
version = version_service.find_by_pacticipant_name_and_number(pacticipant_name: s[:pacticipant_name], pacticipant_version_number: s[:pacticipant_version_number])
|
79
75
|
error_messages << "No pact or verification found for #{s[:pacticipant_name]} version #{s[:pacticipant_version_number]}" if version.nil?
|
80
76
|
elsif s[:tag]
|
81
|
-
version = version_service.
|
77
|
+
version = version_service.find_by_pacticipant_name_and_latest_tag(s[:pacticipant_name], s[:tag])
|
82
78
|
error_messages << "No version of #{s[:pacticipant_name]} found with tag #{s[:tag]}" if version.nil?
|
83
79
|
end
|
84
80
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pact_broker/api/pact_broker_urls'
|
2
2
|
require 'pact_broker/date_helper'
|
3
3
|
require 'pact_broker/pacts/create_formatted_diff'
|
4
|
+
require 'pact_broker/pacts/sort_verifiable_content'
|
4
5
|
require 'pact_broker/repositories'
|
5
6
|
require 'yaml'
|
6
7
|
|
@@ -10,13 +11,13 @@ module PactBroker
|
|
10
11
|
class Diff
|
11
12
|
include PactBroker::Repositories
|
12
13
|
|
13
|
-
def process(params)
|
14
|
+
def process(params, comparison_pact_params = nil, options = {})
|
14
15
|
pact = find_pact(params)
|
15
|
-
|
16
|
+
comparison_pact = comparison_pact_params ? find_pact(comparison_pact_params) : pact_repository.find_previous_distinct_pact(pact)
|
16
17
|
|
17
|
-
if
|
18
|
-
next_pact = pact_repository.find_next_pact(
|
19
|
-
DiffDecorator.new(pact,
|
18
|
+
if comparison_pact
|
19
|
+
next_pact = pact_repository.find_next_pact(comparison_pact) || pact
|
20
|
+
DiffDecorator.new(pact, comparison_pact, next_pact, params[:base_url], { raw: options[:raw] }).to_text
|
20
21
|
else
|
21
22
|
no_previous_version_message pact
|
22
23
|
end
|
@@ -27,7 +28,8 @@ module PactBroker
|
|
27
28
|
def find_pact(params)
|
28
29
|
pact_repository.find_pact(params.consumer_name,
|
29
30
|
params.consumer_version_number,
|
30
|
-
params.provider_name
|
31
|
+
params.provider_name,
|
32
|
+
params.pact_version_sha)
|
31
33
|
end
|
32
34
|
|
33
35
|
def no_previous_version_message(pact)
|
@@ -46,11 +48,12 @@ module PactBroker
|
|
46
48
|
# the latest distinct version content was first created.
|
47
49
|
|
48
50
|
class DiffDecorator
|
49
|
-
def initialize(pact,
|
51
|
+
def initialize(pact, comparison_pact, next_pact, base_url, options)
|
50
52
|
@pact = pact
|
51
|
-
@
|
53
|
+
@comparison_pact = comparison_pact
|
52
54
|
@next_pact = next_pact
|
53
55
|
@base_url = base_url
|
56
|
+
@options = options
|
54
57
|
end
|
55
58
|
|
56
59
|
def to_text
|
@@ -59,7 +62,7 @@ module PactBroker
|
|
59
62
|
|
60
63
|
private
|
61
64
|
|
62
|
-
attr_reader :pact, :
|
65
|
+
attr_reader :pact, :comparison_pact, :next_pact, :base_url, :options
|
63
66
|
|
64
67
|
def change_date_in_words
|
65
68
|
DateHelper.local_date_in_words next_pact.created_at
|
@@ -70,7 +73,7 @@ module PactBroker
|
|
70
73
|
end
|
71
74
|
|
72
75
|
def header
|
73
|
-
title = "# Diff between versions #{
|
76
|
+
title = "# Diff between versions #{comparison_pact.consumer_version_number} and #{pact.consumer_version_number} of the pact between #{pact.consumer.name} and #{pact.provider.name}"
|
74
77
|
description = "The following changes were made #{change_date_ago_in_words} ago (#{change_date_in_words})"
|
75
78
|
|
76
79
|
title + "\n\n" + description
|
@@ -78,7 +81,7 @@ module PactBroker
|
|
78
81
|
|
79
82
|
def links
|
80
83
|
self_url = PactBroker::Api::PactBrokerUrls.pact_url(base_url, pact)
|
81
|
-
previous_distinct_url = PactBroker::Api::PactBrokerUrls.pact_url(base_url,
|
84
|
+
previous_distinct_url = PactBroker::Api::PactBrokerUrls.pact_url(base_url, comparison_pact)
|
82
85
|
|
83
86
|
links = {
|
84
87
|
"current-pact-version" => {
|
@@ -88,7 +91,7 @@ module PactBroker
|
|
88
91
|
},
|
89
92
|
"previous-distinct-pact-version" => {
|
90
93
|
"title" => "Pact",
|
91
|
-
"name" =>
|
94
|
+
"name" => comparison_pact.name,
|
92
95
|
"href" => previous_distinct_url
|
93
96
|
}
|
94
97
|
}
|
@@ -96,12 +99,20 @@ module PactBroker
|
|
96
99
|
end
|
97
100
|
|
98
101
|
def diff
|
99
|
-
CreateFormattedDiff.(pact.json_content,
|
102
|
+
CreateFormattedDiff.(prepare_content(pact.json_content), prepare_content(comparison_pact.json_content))
|
100
103
|
end
|
101
104
|
|
102
105
|
def change_date_ago_in_words
|
103
106
|
DateHelper.distance_of_time_in_words next_pact.created_at, now
|
104
107
|
end
|
108
|
+
|
109
|
+
def prepare_content json_content
|
110
|
+
if options[:raw]
|
111
|
+
json_content
|
112
|
+
else
|
113
|
+
PactBroker::Pacts::SortVerifiableContent.call(json_content)
|
114
|
+
end
|
115
|
+
end
|
105
116
|
end
|
106
117
|
end
|
107
118
|
end
|
@@ -10,6 +10,16 @@ module PactBroker
|
|
10
10
|
merge!(attributes)
|
11
11
|
end
|
12
12
|
|
13
|
+
def self.from_path_info path_info
|
14
|
+
new(
|
15
|
+
consumer_name: path_info.fetch(:consumer_name),
|
16
|
+
provider_name: path_info.fetch(:provider_name),
|
17
|
+
consumer_version_number: path_info[:consumer_version_number],
|
18
|
+
revision_number: path_info[:revision_number],
|
19
|
+
pact_version_sha: path_info[:pact_version_sha]
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
13
23
|
def self.from_request request, path_info
|
14
24
|
json_content = request.body.to_s
|
15
25
|
parsed_content = begin
|
@@ -70,6 +70,24 @@ module PactBroker
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
def find_pact_versions_for_provider provider_name, tag = nil
|
74
|
+
if tag
|
75
|
+
LatestPactPublicationsByConsumerVersion
|
76
|
+
.join(:tags, {version_id: :consumer_version_id})
|
77
|
+
.provider(provider_name)
|
78
|
+
.order_ignore_case(:consumer_name)
|
79
|
+
.order_append(:consumer_version_order)
|
80
|
+
.where(Sequel[:tags][:name] => tag)
|
81
|
+
.collect(&:to_domain)
|
82
|
+
else
|
83
|
+
LatestPactPublicationsByConsumerVersion
|
84
|
+
.provider(provider_name)
|
85
|
+
.order_ignore_case(:consumer_name)
|
86
|
+
.order_append(:consumer_version_order)
|
87
|
+
.collect(&:to_domain)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
73
91
|
# Returns latest pact version for the consumer_version_number
|
74
92
|
def find_by_consumer_version consumer_name, consumer_version_number
|
75
93
|
LatestPactPublicationsByConsumerVersion
|
@@ -68,6 +68,10 @@ module PactBroker
|
|
68
68
|
pact_repository.find_latest_pact_versions_for_provider provider_name, options[:tag]
|
69
69
|
end
|
70
70
|
|
71
|
+
def find_pact_versions_for_provider provider_name, options = {}
|
72
|
+
pact_repository.find_pact_versions_for_provider provider_name, options[:tag]
|
73
|
+
end
|
74
|
+
|
71
75
|
def find_previous_distinct_pact_version params
|
72
76
|
pact = find_pact params
|
73
77
|
return nil if pact.nil?
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'pact_broker/json'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Pacts
|
5
|
+
class SortVerifiableContent
|
6
|
+
|
7
|
+
def self.call json
|
8
|
+
hash = JSON.parse(json, PACT_PARSING_OPTIONS)
|
9
|
+
verifiable_content = if hash['interactions']
|
10
|
+
hash['interactions']
|
11
|
+
elsif hash['messages']
|
12
|
+
hash['messages']
|
13
|
+
end
|
14
|
+
order_verifiable_content(verifiable_content).to_json
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.order_verifiable_content array
|
18
|
+
array_with_ordered_hashes = order_hashes(array)
|
19
|
+
array_with_ordered_hashes.sort{|a, b| a.to_json <=> b.to_json }
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.order_hashes thing
|
23
|
+
case thing
|
24
|
+
when Hash then order_hash(thing)
|
25
|
+
when Array then order_child_array(thing)
|
26
|
+
else thing
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.order_child_array array
|
31
|
+
array.collect{|thing| order_hashes(thing) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.order_hash hash
|
35
|
+
hash.keys.sort.each_with_object({}) do | key, new_hash |
|
36
|
+
new_hash[key] = order_hashes(hash[key])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -59,12 +59,11 @@ module PactBroker
|
|
59
59
|
def create_selector_objects(selector_hashes)
|
60
60
|
selector_hashes.collect do | selector_hash |
|
61
61
|
o = OpenStruct.new(selector_hash)
|
62
|
-
o.
|
63
|
-
o.
|
64
|
-
o.
|
65
|
-
o.
|
66
|
-
o.
|
67
|
-
o.specify_all_versions_checked = !(o.tag || o.pacticipant_version_number) ? 'checked' : nil
|
62
|
+
o.specify_latest_tag = o.tag && o.latest ? 'checked' : nil
|
63
|
+
o.specify_all_tagged = o.tag && !o.latest ? 'checked' : nil
|
64
|
+
o.specify_latest = o.latest ? 'checked' : nil
|
65
|
+
o.specify_version = o.pacticipant_version_number ? 'checked' : nil
|
66
|
+
o.specify_all_versions = !(o.tag || o.pacticipant_version_number) ? 'checked' : nil
|
68
67
|
o
|
69
68
|
end
|
70
69
|
end
|
@@ -29,29 +29,27 @@
|
|
29
29
|
%input{name: 'q[]pacticipant', id: "pacticipant1#{index}", value: selector.pacticipant_name}
|
30
30
|
|
31
31
|
.input-group
|
32
|
-
%input{type: 'radio', name: "ignorethis#{index}", class: 'specify-all-versions version-selectorizor', value: 'all_versions', id: "pacticipant#{index}_all_versions", checked: selector.specify_all_versions_checked}
|
33
|
-
%label{for: "pacticipant#{index}_all_versions"}
|
34
|
-
All versions
|
35
32
|
|
36
33
|
.input-group
|
37
|
-
%
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
%select{ name: "ignorethis#{index}", class: 'version-selectorizor' }
|
35
|
+
%option{ value: 'specify-all-versions', selected: selector.specify_all_versions }
|
36
|
+
All versions
|
37
|
+
%option{ value: 'specify-latest', selected: selector.specify_latest }
|
38
|
+
Latest version
|
39
|
+
%option{ value: 'specify-version', selected: selector.specify_version }
|
40
|
+
Version number ...
|
41
|
+
%option{ value: 'specify-latest-tag', selected: selector.specify_latest_tag }
|
42
|
+
Latest version with tag ...
|
43
|
+
%option{ value: 'specify-all-tagged', selected: selector.specify_all_tagged }
|
44
|
+
All versions with tag...
|
41
45
|
|
42
|
-
|
43
|
-
|
44
|
-
%
|
45
|
-
Latest version
|
46
|
-
%input{name: 'q[]latest', value: 'true', hidden: true, class: 'latest-flag'}
|
46
|
+
%input{name: 'q[]version', type: 'text', id: "pacticipant#{index}_version", class: 'version', value: selector.pacticipant_version_number}
|
47
|
+
|
48
|
+
%input{name: 'q[]tag', type: 'text', id: "pacticipant#{index}_tag", class: 'tag', value: selector.tag}
|
47
49
|
|
48
|
-
.input-group
|
49
|
-
%input{type: 'radio', name: "ignorethis#{index}", class: 'specify-latest-tag version-selectorizor', value: 'tag', id: "pacticipant#{index}_by_tag", checked: selector.specify_latest_tag_checked}
|
50
|
-
%label{for: "pacticipant#{index}_by_tag"}
|
51
|
-
Latest version with tag
|
52
|
-
%input{name: 'q[]tag', type: 'text', id: "pacticipant#{index}_tag", class: "by-latest-tag", value: selector.tag}
|
53
50
|
%input{name: 'q[]latest', value: 'true', hidden: true, class: 'latest-flag'}
|
54
51
|
|
52
|
+
|
55
53
|
%div.top-of-group
|
56
54
|
.input-group
|
57
55
|
%input{type: 'radio', name: "latestby", class: '', value: '', id: 'all_rows', checked: options.all_rows_checked}
|
@@ -75,15 +75,15 @@ module PactBroker
|
|
75
75
|
query = PactBroker::Verifications::AllVerifications
|
76
76
|
.select_all_qualified
|
77
77
|
.join(:versions, {Sequel[:provider_versions][:id] => Sequel[view_name][:provider_version_id]}, {table_alias: :provider_versions})
|
78
|
-
.join(:
|
78
|
+
.join(:latest_pact_publications_by_consumer_versions, { Sequel[view_name][:pact_version_id] => Sequel[:latest_pact_publications_by_consumer_versions][:pact_version_id] })
|
79
79
|
.consumer(consumer_name)
|
80
80
|
.provider(provider_name)
|
81
81
|
.tag(consumer_version_tag)
|
82
82
|
.provider_version_tag(provider_version_tag)
|
83
83
|
|
84
84
|
query.reverse_order(
|
85
|
-
Sequel[:
|
86
|
-
Sequel[:
|
85
|
+
Sequel[:latest_pact_publications_by_consumer_versions][:consumer_version_order],
|
86
|
+
Sequel[:latest_pact_publications_by_consumer_versions][:revision_number],
|
87
87
|
Sequel[:provider_versions][:order],
|
88
88
|
Sequel[view_name][:execution_date]
|
89
89
|
).limit(1).single_record
|
data/lib/pact_broker/version.rb
CHANGED
@@ -12,7 +12,7 @@ module PactBroker
|
|
12
12
|
PactBroker::Domain::Version.where(number: number, pacticipant_id: pacticipant_id).single_record
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def find_by_pacticipant_name_and_latest_tag pacticipant_name, tag
|
16
16
|
PactBroker::Domain::Version
|
17
17
|
.select_all_qualified
|
18
18
|
.join(:pacticipants, {id: :pacticipant_id}, {implicit_qualifier: :versions})
|
@@ -23,6 +23,16 @@ module PactBroker
|
|
23
23
|
.first
|
24
24
|
end
|
25
25
|
|
26
|
+
def find_by_pacticipant_name_and_tag pacticipant_name, tag
|
27
|
+
PactBroker::Domain::Version
|
28
|
+
.select_all_qualified
|
29
|
+
.join(:pacticipants, {id: :pacticipant_id}, {implicit_qualifier: :versions})
|
30
|
+
.join(:tags, {version_id: :id}, {implicit_qualifier: :versions})
|
31
|
+
.where(name_like(Sequel[:tags][:name], tag))
|
32
|
+
.where(name_like(Sequel[:pacticipants][:name], pacticipant_name))
|
33
|
+
.all
|
34
|
+
end
|
35
|
+
|
26
36
|
def find_latest_by_pacticpant_name pacticipant_name
|
27
37
|
PactBroker::Domain::Version
|
28
38
|
.select_all_qualified
|
@@ -15,8 +15,8 @@ module PactBroker
|
|
15
15
|
version_repository.find_by_pacticipant_name_and_number params.fetch(:pacticipant_name), params.fetch(:pacticipant_version_number)
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.
|
19
|
-
version_repository.
|
18
|
+
def self.find_by_pacticipant_name_and_latest_tag(pacticipant_name, tag)
|
19
|
+
version_repository.find_by_pacticipant_name_and_latest_tag(pacticipant_name, tag)
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.delete version
|
@@ -1,27 +1,48 @@
|
|
1
|
-
function handleRadioButtonClicked() {
|
2
|
-
selectApplicableTextBox($(this));
|
3
|
-
clearOtherTextBoxes($(this));
|
4
|
-
}
|
5
1
|
|
6
|
-
function
|
7
|
-
|
2
|
+
function setTextboxVisibility(selectBox, cssSelector, visibility) {
|
3
|
+
var textbox = selectBox.closest('.selector').find(cssSelector);
|
4
|
+
textbox.toggle(visibility);
|
5
|
+
if(visibility) {
|
6
|
+
textbox.prop('disabled', '');
|
7
|
+
textbox.focus();
|
8
|
+
} else {
|
9
|
+
textbox.prop('disabled', 'disabled');
|
10
|
+
}
|
8
11
|
}
|
9
12
|
|
10
|
-
function
|
11
|
-
|
12
|
-
|
13
|
+
function toggleLatestFlag(selectBox, enabled) {
|
14
|
+
var flagElement = selectBox.closest('.selector').find('.latest-flag');
|
15
|
+
if(enabled) {
|
16
|
+
flagElement.prop('disabled', '');
|
17
|
+
} else {
|
18
|
+
flagElement.prop('disabled', 'disabled');
|
19
|
+
}
|
13
20
|
}
|
14
21
|
|
15
|
-
function
|
16
|
-
|
22
|
+
function showApplicableTextBoxes(selectorizor) {
|
23
|
+
var selectorizorType = selectorizor.val();
|
24
|
+
if( selectorizorType === 'specify-version') {
|
25
|
+
setTextboxVisibility(selectorizor, '.version', true);
|
26
|
+
setTextboxVisibility(selectorizor, '.tag', false);
|
27
|
+
}
|
28
|
+
else if( selectorizorType === 'specify-latest-tag' || selectorizorType === 'specify-all-tagged') {
|
29
|
+
setTextboxVisibility(selectorizor, '.version', false);
|
30
|
+
setTextboxVisibility(selectorizor, '.tag', true);
|
31
|
+
}
|
32
|
+
else if ( selectorizorType === 'specify-all-versions' || selectorizorType === 'specify-latest') {
|
33
|
+
setTextboxVisibility(selectorizor, '.version', false);
|
34
|
+
setTextboxVisibility(selectorizor, '.tag', false);
|
35
|
+
}
|
36
|
+
|
37
|
+
if (selectorizorType === 'specify-latest' || selectorizorType === 'specify-latest-tag') {
|
38
|
+
toggleLatestFlag(selectorizor, true);
|
39
|
+
} else {
|
40
|
+
toggleLatestFlag(selectorizor, false);
|
41
|
+
}
|
17
42
|
}
|
18
43
|
|
19
|
-
function
|
20
|
-
|
21
|
-
if(!$.contains(clickedElement.closest('.input-group')[0], $(this)[0])) {
|
22
|
-
$(this).prop('value', '');
|
23
|
-
}
|
24
|
-
});
|
44
|
+
function handleSelectorizorChanged() {
|
45
|
+
showApplicableTextBoxes($(this));
|
25
46
|
}
|
26
47
|
|
27
48
|
function onSubmit() {
|
@@ -30,26 +51,12 @@ function onSubmit() {
|
|
30
51
|
}
|
31
52
|
|
32
53
|
function disableFieldsThatShouldNotBeSubmitted() {
|
33
|
-
disableInputsForUncheckedRadioButtons();
|
34
|
-
disableRadioButtons();
|
35
|
-
}
|
36
|
-
|
37
|
-
function disableInputsForUncheckedRadioButtons() {
|
38
|
-
$('.version-selectorizor').each(function(){
|
39
|
-
if($(this).prop('checked') === false) {
|
40
|
-
$(this).closest('.input-group').find('input').prop('disabled', 'disabled');
|
41
|
-
}
|
42
|
-
});
|
43
|
-
}
|
44
|
-
|
45
|
-
function disableRadioButtons() {
|
46
54
|
$('.version-selectorizor').prop('disabled', 'disabled');
|
47
55
|
}
|
48
56
|
|
49
57
|
$(document).ready(function(){
|
50
|
-
$('.
|
51
|
-
$('.
|
52
|
-
$('.version-selectorizor').click(handleRadioButtonClicked);
|
58
|
+
$('.version-selectorizor').change(handleSelectorizorChanged);
|
59
|
+
$('.version-selectorizor').each(function(){ showApplicableTextBoxes($(this)); });
|
53
60
|
|
54
61
|
$("#matrix").tablesorter({
|
55
62
|
textExtraction : function(node, table, cellIndex){
|