zendesk_api 0.1.11 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +1 -3
  3. data/Gemfile +24 -0
  4. data/Gemfile.lock +75 -10
  5. data/Procfile +1 -0
  6. data/Rakefile +10 -3
  7. data/Readme.md +65 -0
  8. data/bin/zendesk +26 -0
  9. data/config.ru +6 -0
  10. data/config/mongoid.yml +81 -0
  11. data/lib/zendesk_api/actions.rb +2 -2
  12. data/lib/zendesk_api/collection.rb +15 -4
  13. data/lib/zendesk_api/console/base.rb +12 -0
  14. data/lib/zendesk_api/console/console.rb +144 -0
  15. data/lib/zendesk_api/console/extensions.rb +183 -0
  16. data/lib/zendesk_api/console/options.rb +41 -0
  17. data/lib/zendesk_api/resource.rb +12 -1
  18. data/lib/zendesk_api/resources.rb +28 -8
  19. data/lib/zendesk_api/server/base.rb +119 -0
  20. data/lib/zendesk_api/server/docs/account_settings.md +145 -0
  21. data/lib/zendesk_api/server/docs/activity_stream.md +121 -0
  22. data/lib/zendesk_api/server/docs/attachments.md +73 -0
  23. data/lib/zendesk_api/server/docs/autocomplete.md +29 -0
  24. data/lib/zendesk_api/server/docs/categories.md +193 -0
  25. data/lib/zendesk_api/server/docs/custom_roles.md +88 -0
  26. data/lib/zendesk_api/server/docs/forum_subscriptions.md +139 -0
  27. data/lib/zendesk_api/server/docs/forums.md +229 -0
  28. data/lib/zendesk_api/server/docs/group_memberships.md +229 -0
  29. data/lib/zendesk_api/server/docs/groups.md +212 -0
  30. data/lib/zendesk_api/server/docs/introduction.md +159 -0
  31. data/lib/zendesk_api/server/docs/job_statuses.md +86 -0
  32. data/lib/zendesk_api/server/docs/locales.md +124 -0
  33. data/lib/zendesk_api/server/docs/macros.md +287 -0
  34. data/lib/zendesk_api/server/docs/organizations.md +253 -0
  35. data/lib/zendesk_api/server/docs/problems.md +117 -0
  36. data/lib/zendesk_api/server/docs/requests.md +256 -0
  37. data/lib/zendesk_api/server/docs/satisfaction_ratings.md +136 -0
  38. data/lib/zendesk_api/server/docs/search.md +106 -0
  39. data/lib/zendesk_api/server/docs/sharing_agreements.md +57 -0
  40. data/lib/zendesk_api/server/docs/side_loading.md +125 -0
  41. data/lib/zendesk_api/server/docs/suspended_tickets.md +182 -0
  42. data/lib/zendesk_api/server/docs/tags.md +36 -0
  43. data/lib/zendesk_api/server/docs/ticket_audits.md +657 -0
  44. data/lib/zendesk_api/server/docs/ticket_export.md +121 -0
  45. data/lib/zendesk_api/server/docs/ticket_fields.md +277 -0
  46. data/lib/zendesk_api/server/docs/ticket_import.md +65 -0
  47. data/lib/zendesk_api/server/docs/ticket_metrics.md +125 -0
  48. data/lib/zendesk_api/server/docs/tickets.md +622 -0
  49. data/lib/zendesk_api/server/docs/topic_comments.md +221 -0
  50. data/lib/zendesk_api/server/docs/topic_subscriptions.md +140 -0
  51. data/lib/zendesk_api/server/docs/topic_votes.md +154 -0
  52. data/lib/zendesk_api/server/docs/topics.md +335 -0
  53. data/lib/zendesk_api/server/docs/triggers.md +199 -0
  54. data/lib/zendesk_api/server/docs/user_identities.md +279 -0
  55. data/lib/zendesk_api/server/docs/users.md +400 -0
  56. data/lib/zendesk_api/server/docs/views.md +505 -0
  57. data/lib/zendesk_api/server/helper.rb +104 -0
  58. data/lib/zendesk_api/server/html_renderer.rb +98 -0
  59. data/lib/zendesk_api/server/models/user_request.rb +16 -0
  60. data/lib/zendesk_api/server/models/zlib_json.rb +13 -0
  61. data/lib/zendesk_api/server/public/config.rb +26 -0
  62. data/lib/zendesk_api/server/public/favicon.ico +0 -0
  63. data/lib/zendesk_api/server/public/images/glyphicons-halflings-white.png +0 -0
  64. data/lib/zendesk_api/server/public/images/glyphicons-halflings.png +0 -0
  65. data/lib/zendesk_api/server/public/images/spinner.gif +0 -0
  66. data/lib/zendesk_api/server/public/images/zendesk_developers_bg.png +0 -0
  67. data/lib/zendesk_api/server/public/images/zendesk_developers_header.png +0 -0
  68. data/lib/zendesk_api/server/public/javascripts/application.js +186 -0
  69. data/lib/zendesk_api/server/public/javascripts/bootstrap-alert.js +90 -0
  70. data/lib/zendesk_api/server/public/javascripts/bootstrap-button.js +96 -0
  71. data/lib/zendesk_api/server/public/javascripts/bootstrap-carousel.js +169 -0
  72. data/lib/zendesk_api/server/public/javascripts/bootstrap-collapse.js +157 -0
  73. data/lib/zendesk_api/server/public/javascripts/bootstrap-dropdown.js +100 -0
  74. data/lib/zendesk_api/server/public/javascripts/bootstrap-modal.js +218 -0
  75. data/lib/zendesk_api/server/public/javascripts/bootstrap-popover.js +98 -0
  76. data/lib/zendesk_api/server/public/javascripts/bootstrap-scrollspy.js +151 -0
  77. data/lib/zendesk_api/server/public/javascripts/bootstrap-tab.js +135 -0
  78. data/lib/zendesk_api/server/public/javascripts/bootstrap-tooltip.js +275 -0
  79. data/lib/zendesk_api/server/public/javascripts/bootstrap-transition.js +61 -0
  80. data/lib/zendesk_api/server/public/javascripts/bootstrap-typeahead.js +285 -0
  81. data/lib/zendesk_api/server/public/sass/screen.scss +102 -0
  82. data/lib/zendesk_api/server/public/sass/styles.scss +5 -0
  83. data/lib/zendesk_api/server/public/stylesheets/developer.screen.css +836 -0
  84. data/lib/zendesk_api/server/public/stylesheets/screen.css +129 -0
  85. data/lib/zendesk_api/server/public/stylesheets/styles.css +6208 -0
  86. data/lib/zendesk_api/server/templates/footer.haml +13 -0
  87. data/lib/zendesk_api/server/templates/header.haml +20 -0
  88. data/lib/zendesk_api/server/templates/index.haml +68 -0
  89. data/lib/zendesk_api/server/templates/layout.haml +44 -0
  90. data/lib/zendesk_api/server/templates/param.haml +4 -0
  91. data/lib/zendesk_api/server/templates/search.haml +23 -0
  92. data/lib/zendesk_api/server/templates/sidebar.haml +7 -0
  93. data/lib/zendesk_api/version.rb +1 -1
  94. data/spec/{association_spec.rb → core/association_spec.rb} +1 -1
  95. data/spec/{client_spec.rb → core/client_spec.rb} +1 -1
  96. data/spec/{collection_spec.rb → core/collection_spec.rb} +1 -1
  97. data/spec/{configuration_spec.rb → core/configuration_spec.rb} +1 -1
  98. data/spec/{create_resource_spec.rb → core/create_resource_spec.rb} +1 -1
  99. data/spec/{data_resource_spec.rb → core/data_resource_spec.rb} +1 -1
  100. data/spec/{inflection_spec.rb → core/inflection_spec.rb} +1 -1
  101. data/spec/{lru_cache_spec.rb → core/lru_cache_spec.rb} +1 -1
  102. data/spec/{middleware → core/middleware}/request/etag_cache_spec.rb +1 -1
  103. data/spec/{middleware → core/middleware}/request/retry_spec.rb +1 -1
  104. data/spec/{middleware → core/middleware}/request/test.jpg +0 -0
  105. data/spec/{middleware → core/middleware}/request/upload_spec.rb +1 -1
  106. data/spec/{middleware → core/middleware}/response/callback_spec.rb +1 -1
  107. data/spec/{middleware → core/middleware}/response/deflate_spec.rb +1 -1
  108. data/spec/{middleware → core/middleware}/response/gzip_spec.rb +1 -1
  109. data/spec/{middleware → core/middleware}/response/parse_iso_dates_spec.rb +1 -1
  110. data/spec/{read_resource_spec.rb → core/read_resource_spec.rb} +1 -1
  111. data/spec/{rescue_spec.rb → core/rescue_spec.rb} +1 -1
  112. data/spec/{resource_spec.rb → core/resource_spec.rb} +1 -1
  113. data/spec/{search_spec.rb → core/search_spec.rb} +1 -1
  114. data/spec/{spec_helper.rb → core/spec_helper.rb} +5 -5
  115. data/spec/{trackie_spec.rb → core/trackie_spec.rb} +1 -1
  116. data/{live → spec/live}/Readme.md +0 -0
  117. data/{live → spec/live}/activity_spec.rb +1 -1
  118. data/{live → spec/live}/audit_spec.rb +1 -1
  119. data/{live → spec/live}/bookmark_spec.rb +1 -1
  120. data/{live → spec/live}/category_spec.rb +1 -1
  121. data/{live → spec/live}/collection_spec.rb +1 -1
  122. data/{live → spec/live}/crm_spec.rb +1 -1
  123. data/{live → spec/live}/custom_role_spec.rb +1 -1
  124. data/{live → spec/live}/forum_spec.rb +1 -1
  125. data/{live → spec/live}/forum_subscription_spec.rb +1 -1
  126. data/{live → spec/live}/group_membership_spec.rb +1 -1
  127. data/{live → spec/live}/group_spec.rb +1 -1
  128. data/{live → spec/live}/identity_spec.rb +1 -1
  129. data/{live → spec/live}/locale_spec.rb +1 -1
  130. data/{live → spec/live}/macro_spec.rb +1 -1
  131. data/{live → spec/live}/mobile_device_spec.rb +1 -1
  132. data/{live → spec/live}/organization_spec.rb +1 -1
  133. data/{live → spec/live}/request_spec.rb +1 -1
  134. data/{live → spec/live}/satisfaction_rating_spec.rb +1 -1
  135. data/{live → spec/live}/setting_spec.rb +1 -1
  136. data/{live → spec/live}/suspended_ticket_spec.rb +1 -1
  137. data/{live → spec/live}/ticket_field_spec.rb +1 -1
  138. data/{live → spec/live}/ticket_metrics_spec.rb +1 -1
  139. data/{live → spec/live}/ticket_spec.rb +1 -1
  140. data/spec/live/topic_comment_spec.rb +24 -0
  141. data/{live → spec/live}/topic_spec.rb +1 -1
  142. data/{live → spec/live}/topic_subscription_spec.rb +1 -1
  143. data/{live → spec/live}/topic_vote_spec.rb +1 -1
  144. data/{live → spec/live}/upload_spec.rb +1 -1
  145. data/{live → spec/live}/user_spec.rb +1 -1
  146. data/{live → spec/live}/view_spec.rb +1 -1
  147. data/spec/macros/resource_macros.rb +1 -1
  148. data/spec/server/app_spec.rb +140 -0
  149. data/spec/server/helper_spec.rb +97 -0
  150. data/spec/server/html_renderer_spec.rb +130 -0
  151. data/spec/server/spec_helper.rb +43 -0
  152. metadata +198 -77
  153. data/live/topic_comment_spec.rb +0 -13
@@ -0,0 +1,104 @@
1
+ module ZendeskAPI::Server
2
+ module Helper
3
+ def full_url
4
+ [params["url"], @path].compact.join("/")
5
+ end
6
+
7
+ def coerce_path(path)
8
+ if path =~ %r{(https?://)?(\w+)(\.zendesk\.com)?(/api/v2)?/(.*)}
9
+ if $1 == "http://"
10
+ @error = "Please enter a valid https URL"
11
+ path
12
+ elsif !$2 || $2.empty?
13
+ @error = "Please enter a valid subdomain"
14
+ path
15
+ else
16
+ params["url"] = "https://#{$2}.zendesk.com/api/v2"
17
+ $5
18
+ end
19
+ else
20
+ @error = "Please enter a valid URL"
21
+ path
22
+ end
23
+ end
24
+
25
+ def execute_request
26
+ unless @method && client.connection.respond_to?(@method)
27
+ @error = "The input you entered was invalid"
28
+ return
29
+ end
30
+
31
+ begin
32
+ response = client.connection.send(@method, @path) do |request|
33
+ request.params = @url_params.inject({}) do |accum, h|
34
+ accum.merge(h["name"] => h["value"])
35
+ end
36
+
37
+ if @method != :get && @json && !@json.empty?
38
+ request.body = JSON.parse(@json)
39
+ end
40
+
41
+ set_request(request.to_env(client.connection))
42
+ end
43
+ rescue Faraday::Error::ConnectionFailed => e
44
+ @error = "The connection failed"
45
+ rescue Faraday::Error::ClientError => e
46
+ set_response(e.response) if e.response
47
+ rescue JSON::ParserError
48
+ @error = "The JSON you attempted to send was invalid"
49
+ rescue URI::InvalidURIError, ArgumentError
50
+ @error = "Please enter a valid URL"
51
+ else
52
+ set_response(:body => response.body,
53
+ :headers => response.env[:response_headers],
54
+ :status => response.env[:status])
55
+ end
56
+ end
57
+
58
+ def map_headers(headers)
59
+ headers.map do |k,v|
60
+ name = k.split("-").map(&:capitalize).join("-")
61
+ "#{name}: #{v}"
62
+ end.join("\n")
63
+ end
64
+
65
+ def set_request(request)
66
+ @html_request = <<-END
67
+ HTTP/1.1 #{@method.to_s.upcase} #{request[:url]}
68
+ #{map_headers(request[:request_headers])}
69
+ END
70
+
71
+ request_headers = request[:request_headers].dup
72
+ request_headers.delete("Authorization")
73
+
74
+ @user_request_hash = { :url => request[:url].to_s, :request_headers => request_headers }
75
+
76
+ if @method != :get && @json && !@json.empty?
77
+ parsed_json = CodeRay.scan(@json, :json).span
78
+ @html_request << "\n\n#{parsed_json}"
79
+ end
80
+ end
81
+
82
+ def set_response(response)
83
+ @html_response =<<-END
84
+ HTTP/1.1 #{response[:status]}
85
+ #{map_headers(response[:headers])}
86
+
87
+
88
+ #{CodeRay.scan(JSON.pretty_generate(response[:body]), :json).span}
89
+ END
90
+
91
+ @user_response_hash = { :status => response[:status], :headers => response[:headers], :body => response[:body] }
92
+ end
93
+
94
+ def client(params = params)
95
+ @client ||= ZendeskAPI::Client.new do |c|
96
+ params.each do |key, value|
97
+ c.send("#{key}=", value)
98
+ end
99
+
100
+ c.allow_http = App.development?
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,98 @@
1
+ # Modified from DoubleDoc
2
+ # https://github.com/staugaard/double_doc/blob/master/lib/double_doc/html_renderer.rb
3
+ module ZendeskAPI::Server
4
+ class HtmlRenderer
5
+ def self.markdown
6
+ @markdown ||= Redcarpet::Markdown.new(RedcarpetRenderer, :fenced_code_blocks => true, :no_intra_emphasis => true, :tables => true)
7
+ end
8
+
9
+ def self.render(text)
10
+ markdown.render(text)
11
+ end
12
+
13
+ def self.generate_id(text)
14
+ text.strip.downcase.gsub(/[\s,]+/, '-')
15
+ end
16
+
17
+ class RedcarpetRenderer < Redcarpet::Render::HTML
18
+ attr_reader :headers
19
+
20
+ def icons
21
+ <<-END
22
+ <i class=\"header-icon icon-plus\"></i>
23
+ <i class=\"header-icon icon-minus hide\"></i>
24
+ END
25
+ end
26
+
27
+ def header(text, level)
28
+ top_level = [2, 3].include?(level)
29
+ id = HtmlRenderer.generate_id(text)
30
+
31
+ @headers ||= []
32
+ @headers << id if top_level
33
+
34
+ "<h#{level} id=\"#{id}\">
35
+ #{icons if top_level}
36
+ #{text}
37
+ </h#{level}>"
38
+ end
39
+
40
+ def block_code(code, language)
41
+ # CodeRay doesn't know HTTP
42
+ language = "json" if language == "http"
43
+
44
+ mod = {}
45
+
46
+ json = nil
47
+
48
+ if language
49
+ if code.start_with?("curl")
50
+ if code =~ %r[(https://{subdomain}.zendesk.com/api/v2/.*.json(\?(\w+={.+})+ )?)]
51
+ example = true
52
+
53
+ mod["class"] = "example"
54
+ mod["data-url"] = $1.strip
55
+
56
+ # This grabs the -d parameter
57
+ # ...
58
+ if code.include?(" -d ")
59
+ str_begin = code.index(/['"]/, code.index(" -d "))
60
+
61
+ chars = code[str_begin..-1].chars.to_a
62
+ str_end = nil
63
+
64
+ chars[1..-1].each_with_index do |char, i|
65
+ if char == chars[0] && chars[i - 1] != "\\"
66
+ str_end = i
67
+ break
68
+ end
69
+ end
70
+
71
+ mod["data-json"] = code.slice(str_begin + 1..(str_begin + str_end)) if str_end
72
+ end
73
+
74
+ if code =~ /-X (PUT|POST|GET|DELETE)/
75
+ mod["data-method"] = $1
76
+ end
77
+ end
78
+ end
79
+
80
+ code = CodeRay.scan(code, language).html(:wrap => nil)
81
+ end
82
+
83
+ mod = mod.inject([]) {|str,(k,v)| str.push("#{k}='#{v}'")}.join(" ")
84
+
85
+ if example
86
+ <<-END
87
+ <button class="btn example" title="Fill in the form with this example">
88
+ <i class="icon icon-pencil"></i>
89
+ </button>
90
+ <pre #{mod}>#{code}</pre>
91
+ END
92
+ else
93
+ "<pre>#{code}</pre>"
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,16 @@
1
+ require 'zendesk_api/server/models/zlib_json'
2
+
3
+ module ZendeskAPI::Server
4
+ class UserRequest
5
+ include Mongoid::Document
6
+
7
+ field :method, :type => Symbol
8
+ field :url, :type => String
9
+ field :path, :type => String
10
+ field :json, :type => String
11
+ field :url_params, :type => Array
12
+
13
+ field :request, :type => ZlibJSON
14
+ field :response, :type => ZlibJSON
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module ZendeskAPI::Server
2
+ class ZlibJSON < Hash
3
+ class << self
4
+ def demongoize(serialized_object)
5
+ JSON.parse(Zlib.inflate(serialized_object.to_s)).symbolize_keys
6
+ end
7
+
8
+ def mongoize(input_hash)
9
+ Moped::BSON::Binary.new(:generic, Zlib.deflate(input_hash.to_json))
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ require 'bootstrap-sass'
2
+ # Require any additional compass plugins here.
3
+
4
+
5
+ # Set this to the root of your project when deployed:
6
+ http_path = "/"
7
+ css_dir = "stylesheets"
8
+ sass_dir = "sass"
9
+ images_dir = "images"
10
+ javascripts_dir = "javascripts"
11
+
12
+ # You can select your preferred output style here (can be overridden via the command line):
13
+ # output_style = :expanded or :nested or :compact or :compressed
14
+
15
+ # To enable relative paths to assets via compass helper functions. Uncomment:
16
+ # relative_assets = true
17
+
18
+ # To disable debugging comments that display the original location of your selectors. Uncomment:
19
+ # line_comments = false
20
+
21
+
22
+ # If you prefer the indented syntax, you might want to regenerate this
23
+ # project again passing --syntax sass, or you can uncomment this:
24
+ # preferred_syntax = :sass
25
+ # and then run:
26
+ # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
@@ -0,0 +1,186 @@
1
+ function search(query) {
2
+ query = query.split("#");
3
+
4
+ $.post("/search", { query: query[0] }, function(data) {
5
+ $("#search-results").html(data);
6
+
7
+ $("#search-results h2, h3").nextUntil("h3").addClass("hide");
8
+ $("#search-results h2, h3").children("i.icon-minus").addClass("hide");
9
+ $("#search-results h2, h3").children("i.icon-plus").removeClass("hide");
10
+
11
+ if(query[1]) {
12
+ var header = $("#search-results #" + query[1]);
13
+
14
+ if(header.children("i.icon-minus").hasClass("hide"))
15
+ header.click();
16
+
17
+ // document.getElementById(query[1]).scrollIntoView(true);
18
+ }
19
+ }).error(function() {
20
+ // TODO
21
+ });
22
+ }
23
+
24
+ function toggle_json_editor() {
25
+ var method = $("#method-select option:selected").val();
26
+ $("#json").toggle(method == "POST" || method == "PUT");
27
+ }
28
+
29
+ $(document).ready(function() {
30
+ var dirty = false;
31
+
32
+ $('#search input').keyup(function() {
33
+ var value = $(this).val();
34
+ dirty = value != "";
35
+
36
+ setTimeout(function() {
37
+ if(dirty) {
38
+ dirty = false;
39
+ search($('#search input').val());
40
+ }
41
+ }, 750);
42
+ });
43
+
44
+ $('#clear-search').click(function() {
45
+ $('#search input').val("");
46
+ search("help");
47
+ });
48
+
49
+ $("#search-results h2, h3").nextUntil("h3").addClass("hide");
50
+
51
+ $("#search-results h2, h3").live("click", function() {
52
+ $(this).nextUntil("h3").toggleClass("hide");
53
+ $(this).children().toggleClass("hide");
54
+
55
+ query = $('#search input').val();
56
+ query = query.split("#");
57
+ $('#search input').val(query[0] + "#" + this.id);
58
+ });
59
+
60
+ $("#search-results a").live("click", function(event) {
61
+ event.preventDefault();
62
+
63
+ query = $(this).attr("href");
64
+ query = query.replace(/\.(html|md)/, "");
65
+
66
+ $('#search input').val(query);
67
+
68
+ search(query);
69
+ });
70
+
71
+ if(window.location.hash == "#response" || window.location.hash == "#request") {
72
+ $('#response .tab').addClass('hide');
73
+ $('#response ul.nav-pills li').removeClass('active');
74
+
75
+ var tab = window.location.hash + "-tab";
76
+ $(tab).removeClass("hide");
77
+ $(tab + "-link").parent('li').addClass('active');
78
+ } else if(window.location.hash == "#documentation") {
79
+ $('.frame.tab').addClass('hide');
80
+ $('#navigation ul.nav-pills li').removeClass('active');
81
+
82
+ $('#help-tab').removeClass('hide');
83
+ $('#help-tab-link').parent("li").addClass('active');
84
+ }
85
+
86
+ $('#response .tab-link').click(function() {
87
+ var elem = $(this);
88
+
89
+ $('#response .tab').addClass("hide");
90
+ $('#response ul.nav-pills li').removeClass('active');
91
+
92
+ $('#' + this.id.replace(/-link/, '')).removeClass("hide");
93
+ elem.parent('li').addClass('active');
94
+
95
+ event.preventDefault();
96
+ });
97
+
98
+ $('#possible-params').click(function(event) {
99
+ $(this).children('i').toggleClass('hide');
100
+ $('#possible-params-text').toggleClass('hide');
101
+
102
+ event.preventDefault();
103
+ });
104
+
105
+ $('#navigation .tab-link').click(function() {
106
+ var elem = $(this);
107
+
108
+ $('.frame.tab').addClass("hide");
109
+ $('#navigation ul.nav-pills li').removeClass('active');
110
+
111
+ $('#' + this.id.replace(/-link/, '')).removeClass("hide");
112
+ elem.parent('li').addClass('active');
113
+ });
114
+
115
+ $('#json').keydown(function() {
116
+ $('#input p.error').html('');
117
+ });
118
+
119
+ $('#json').keyup(function() {
120
+ var value = $('#json').val();
121
+
122
+ $('#json').removeClass('invalid');
123
+
124
+ if(value == '') {
125
+ $('#json').removeClass('invalid', 'valid');
126
+ return;
127
+ }
128
+
129
+ try {
130
+ JSON.parse(value);
131
+ $('#json').addClass('valid');
132
+ } catch(e) {
133
+ $('#json').addClass('invalid');
134
+ }
135
+ });
136
+
137
+ $('button.example').live("click", function() {
138
+ var element = $(this).next();
139
+
140
+ var url = element.data("url");
141
+ url = url.split("?");
142
+
143
+ $("#path").val(url[0]);
144
+
145
+ if(url[1]) {
146
+ var params = url[1].split("&");
147
+ var param, inputs;
148
+
149
+ for(var i = 0; i < params.length; i++) {
150
+ param = params[i].split("=");
151
+ $("#add-param").click();
152
+ inputs = $("#params div:last input");
153
+
154
+ if(inputs.length == 2) {
155
+ $(inputs[0]).val(param[0]);
156
+ $(inputs[1]).val(param[1]);
157
+ }
158
+ }
159
+ }
160
+
161
+
162
+ var method = element.data("method") || "GET";
163
+
164
+ $("#method-select").val(method);
165
+ $("#method-select").trigger("change");
166
+
167
+ var json = element.data("json");
168
+
169
+ if(json) {
170
+ $("#json").val(JSON.stringify(json));
171
+ } else {
172
+ $("#json").val("");
173
+ }
174
+
175
+ window.location.hash = "";
176
+ $("#throw-tab-link").click();
177
+ });
178
+
179
+ $("#method-select").change(toggle_json_editor);
180
+ toggle_json_editor();
181
+
182
+ $(".remove-param").live("click", function(event) {
183
+ event.preventDefault();
184
+ $(this).parent("div").remove();
185
+ });
186
+ });