| @@ -16,10 +16,25 @@ class @AgentEditPage | ||
| 16 | 16 |      if $("#agent_type").length | 
| 17 | 17 |        $("#agent_type").on "change", => @handleTypeChange(false) | 
| 18 | 18 | @handleTypeChange(true) | 
| 19 | +      $('#agent_type').select2 | |
| 20 | + width: 'resolve' | |
| 21 | + formatResult: formatAgentForSelect | |
| 22 | + escapeMarkup: (m) -> | |
| 23 | + m | |
| 24 | + matcher: (term, text, opt) -> | |
| 25 | +          description = opt.attr('title') | |
| 26 | + text.toUpperCase().indexOf(term.toUpperCase()) >= 0 or description.toUpperCase().indexOf(term.toUpperCase()) >= 0 | |
| 27 | + | |
| 19 | 28 | else | 
| 20 | 29 | @enableDryRunButton() | 
| 21 | 30 | @buildAce() | 
| 22 | 31 |  | 
| 32 | + formatAgentForSelect = (agent) -> | |
| 33 | + originalOption = agent.element | |
| 34 | +    description = $(originalOption).attr('title') | |
| 35 | + description = if /^[a-zA-Z]/.test(description) then description else '' | |
| 36 | + '<strong>' + agent.text + '</strong><br/>' + description | |
| 37 | + | |
| 23 | 38 | handleTypeChange: (firstTime) -> | 
| 24 | 39 |      $(".event-descriptions").html("").hide() | 
| 25 | 40 |      type = $('#agent_type').val() | 
| @@ -2,12 +2,12 @@ module Agents | ||
| 2 | 2 | class DataOutputAgent < Agent | 
| 3 | 3 | cannot_be_scheduled! | 
| 4 | 4 |  | 
| 5 | - description <<-MD | |
| 5 | + description do <<-MD | |
| 6 | 6 | The Agent outputs received events as either RSS or JSON. Use it to output a public or private stream of Huginn data. | 
| 7 | 7 |  | 
| 8 | 8 | This Agent will output data at: | 
| 9 | 9 |  | 
| 10 | -      `https://\#{ENV['DOMAIN']}/users/\#{user.id}/web_requests/\#{id || '<id>'}/:secret.xml` | |
| 10 | +      `https://#{ENV['DOMAIN']}/users/#{user.id}/web_requests/#{id || '<id>'}/:secret.xml` | |
| 11 | 11 |  | 
| 12 | 12 | where `:secret` is one of the allowed secrets specified in your options and the extension can be `xml` or `json`. | 
| 13 | 13 |  | 
| @@ -22,6 +22,7 @@ module Agents | ||
| 22 | 22 | * `events_to_show` - The number of events to output in RSS or JSON. (default: `40`) | 
| 23 | 23 | * `ttl` - A value for the <ttl> element in RSS output. (default: `60`) | 
| 24 | 24 | MD | 
| 25 | + end | |
| 25 | 26 |  | 
| 26 | 27 | def default_options | 
| 27 | 28 |        { | 
| @@ -8,7 +8,7 @@ module Agents | ||
| 8 | 8 | cannot_receive_events! | 
| 9 | 9 | default_schedule "every_1d" | 
| 10 | 10 |  | 
| 11 | - description <<-MD | |
| 11 | + description do <<-MD | |
| 12 | 12 | This Agent consumes RSS feeds and emits events when they change. | 
| 13 | 13 |  | 
| 14 | 14 | This Agent is fairly simple, using [feed-normalizer](https://github.com/aasmith/feed-normalizer) as a base. For complex feeds | 
| @@ -24,8 +24,9 @@ module Agents | ||
| 24 | 24 | * `headers` - When present, it should be a hash of headers to send with the request. | 
| 25 | 25 | * `basic_auth` - Specify HTTP basic auth parameters: `"username:password"`, or `["username", "password"]`. | 
| 26 | 26 | * `disable_ssl_verification` - Set to `true` to disable ssl verification. | 
| 27 | -        * `user_agent` - A custom User-Agent name (default: "Faraday v\#{Faraday::VERSION}"). | |
| 27 | +        * `user_agent` - A custom User-Agent name (default: "Faraday v#{Faraday::VERSION}"). | |
| 28 | 28 | MD | 
| 29 | + end | |
| 29 | 30 |  | 
| 30 | 31 | def default_options | 
| 31 | 32 |        { | 
| @@ -6,17 +6,18 @@ module Agents | ||
| 6 | 6 |  | 
| 7 | 7 |      gem_dependency_check { defined?(Haversine) } | 
| 8 | 8 |  | 
| 9 | - description <<-MD | |
| 9 | + description do <<-MD | |
| 10 | 10 | The UserLocationAgent creates events based on WebHook POSTS that contain a `latitude` and `longitude`. You can use the [POSTLocation](https://github.com/cantino/post_location) or [PostGPS](https://github.com/chriseidhof/PostGPS) iOS app to post your location. | 
| 11 | 11 |  | 
| 12 | 12 |        #{'## Include `haversine` in your Gemfile to use this Agent!' if dependencies_missing?} | 
| 13 | 13 |  | 
| 14 | -      Your POST path will be `https://\#{ENV['DOMAIN']}/users/\#{user.id}/update_location/:secret` where `:secret` is specified in your options. | |
| 14 | +      Your POST path will be `https://#{ENV['DOMAIN']}/users/#{user.id}/update_location/:secret` where `:secret` is specified in your options. | |
| 15 | 15 |  | 
| 16 | 16 | If you want to only keep more precise locations, set `max_accuracy` to the upper bound, in meters. The default name for this field is `accuracy`, but you can change this by setting a value for `accuracy_field`. | 
| 17 | 17 |  | 
| 18 | 18 | If you want to require a certain distance traveled, set `min_distance` to the minimum distance, in meters. Note that GPS readings and the measurement itself aren't exact, so don't rely on this for precision filtering. | 
| 19 | 19 | MD | 
| 20 | + end | |
| 20 | 21 |  | 
| 21 | 22 | event_description <<-MD | 
| 22 | 23 | Assuming you're using the iOS application, events look like this: | 
| @@ -3,12 +3,12 @@ module Agents | ||
| 3 | 3 | cannot_be_scheduled! | 
| 4 | 4 | cannot_receive_events! | 
| 5 | 5 |  | 
| 6 | - description <<-MD | |
| 6 | + description do <<-MD | |
| 7 | 7 | Use this Agent to create events by receiving webhooks from any source. | 
| 8 | - | |
| 9 | 8 | In order to create events with this agent, make a POST request to: | 
| 9 | + | |
| 10 | 10 | ``` | 
| 11 | -         https://\#{ENV['DOMAIN']}/users/\#{user.id}/web_requests/\#{id || '<id>'}/:secret | |
| 11 | +         https://#{ENV['DOMAIN']}/users/#{user.id}/web_requests/#{id || '<id>'}/:secret | |
| 12 | 12 | ``` where `:secret` is specified in your options. | 
| 13 | 13 |  | 
| 14 | 14 | Options: | 
| @@ -20,7 +20,7 @@ module Agents | ||
| 20 | 20 | used as the Event payload. If `payload_path` points to an array, | 
| 21 | 21 | Events will be created for each element. | 
| 22 | 22 | MD | 
| 23 | - | |
| 23 | + end | |
| 24 | 24 |  | 
| 25 | 25 | event_description do | 
| 26 | 26 | <<-MD | 
| @@ -25,26 +25,6 @@ | ||
| 25 | 25 | <%= f.label :type %> | 
| 26 | 26 |                <%= f.select :type, options_for_select([['Select an Agent Type', 'Agent', {title: ''}]] + Agent.types.map {|type| [type.name.gsub(/^.*::/, '').underscore.humanize.titleize, type, {title: type.description.to_s.strip.split(/\r?\n/)[0]}] }, @agent.type), {}, :class => 'form-control' %> | 
| 27 | 27 | </div> | 
| 28 | - <script> | |
| 29 | -              function formatAgentForSelect(agent) { | |
| 30 | - var originalOption = agent.element; | |
| 31 | -                var description = $(originalOption).attr('title'); | |
| 32 | - description = (/^[a-zA-Z]/.test(description)) ? description : ''; | |
| 33 | - return '<strong>' + agent.text + '</strong><br/>' + description; | |
| 34 | - } | |
| 35 | -              $(function() { | |
| 36 | -                $('#agent_type').select2({ | |
| 37 | - width: 'resolve', | |
| 38 | - formatResult: formatAgentForSelect, | |
| 39 | -                  escapeMarkup: function(m) { return m; }, | |
| 40 | -                  matcher: function(term, text, opt) { | |
| 41 | -                    var description = opt.attr('title'); | |
| 42 | - return text.toUpperCase().indexOf(term.toUpperCase())>=0 | |
| 43 | - || description.toUpperCase().indexOf(term.toUpperCase())>=0; | |
| 44 | - } | |
| 45 | - }); | |
| 46 | - }); | |
| 47 | - </script> | |
| 48 | 28 | <% end %> | 
| 49 | 29 | </div> | 
| 50 | 30 |  |