| @@ -2,6 +2,7 @@ class @AgentShowPage | ||
| 2 | 2 | constructor: -> | 
| 3 | 3 |      $(".agent-show #show-tabs a[href='#logs'], #logs .refresh").on "click", @fetchLogs | 
| 4 | 4 |      $(".agent-show #logs .clear").on "click", @clearLogs | 
| 5 | +    $(".agent-show #memory .clear").on "click", @clearMemory | |
| 5 | 6 |  | 
| 6 | 7 | # Trigger tabs when navigated to. | 
| 7 | 8 | if tab = window.location.href.match(/tab=(\w+)\b/i)?[1] | 
| @@ -39,6 +40,20 @@ class @AgentShowPage | ||
| 39 | 40 |          $("#logs .spinner").stop(true, true).fadeOut -> | 
| 40 | 41 |            $("#logs .refresh, #logs .clear").show() | 
| 41 | 42 |  | 
| 43 | + clearMemory: (e) -> | |
| 44 | +    if confirm("Are you sure you want to clear memory of this Agent?") | |
| 45 | +      agentId = $(e.target).closest("[data-agent-id]").data("agent-id") | |
| 46 | + e.preventDefault() | |
| 47 | +      $("#memory .spinner").css(display: 'inline-block') | |
| 48 | +      $("#memory .clear").hide() | |
| 49 | +      $.post "/agents/#{agentId}/memory", { "_method": "DELETE" } | |
| 50 | + .done -> | |
| 51 | +          $("#memory .spinner").fadeOut -> | |
| 52 | +            $("#memory + .memory").text "{\n}\n" | |
| 53 | + .fail -> | |
| 54 | +          $("#memory .spinner").fadeOut -> | |
| 55 | +            $("#memory .clear").css(display: 'inline-block') | |
| 56 | + | |
| 42 | 57 | $ -> | 
| 43 | 58 | Utils.registerPage(AgentShowPage, forPathsMatching: /^agents\/\d+/) | 
| 44 | 59 |  | 
| @@ -61,7 +61,7 @@ img.odin { | ||
| 61 | 61 | display: none; | 
| 62 | 62 | } | 
| 63 | 63 |  | 
| 64 | -img.spinner { | |
| 64 | +.spinner { | |
| 65 | 65 | display: none; | 
| 66 | 66 | vertical-align: bottom; | 
| 67 | 67 | } | 
| @@ -172,6 +172,13 @@ span.not-applicable:after { | ||
| 172 | 172 | font-weight: bold; | 
| 173 | 173 | } | 
| 174 | 174 |  | 
| 175 | +// Memory | |
| 176 | + | |
| 177 | +#memory .action-icon { | |
| 178 | + display: inline-block; | |
| 179 | + cursor: pointer; | |
| 180 | +} | |
| 181 | + | |
| 175 | 182 | // Credentials | 
| 176 | 183 |  | 
| 177 | 184 |  #ace-credential-value { | 
| @@ -285,3 +292,28 @@ $service-colors: #55acee #8fc857 #444444 #2c4762 #007EE5; | ||
| 285 | 292 |  .label-service { | 
| 286 | 293 | @include services; | 
| 287 | 294 | } | 
| 295 | + | |
| 296 | +// Font Awesome Spinner | |
| 297 | + | |
| 298 | +.fa-spin-custom { | |
| 299 | + @include animation(spin 1000ms infinite linear); | |
| 300 | +} | |
| 301 | + | |
| 302 | +@mixin keyframes($name) | |
| 303 | +{ | |
| 304 | +  @-webkit-keyframes $name { | |
| 305 | + @content; | |
| 306 | + } | |
| 307 | +  @keyframes $name { | |
| 308 | + @content; | |
| 309 | + } | |
| 310 | +} | |
| 311 | + | |
| 312 | +@include keyframes(spin) { | |
| 313 | +  0% { | |
| 314 | + @include rotate(0deg); | |
| 315 | + } | |
| 316 | +  100% { | |
| 317 | + @include rotate(359deg); | |
| 318 | + } | |
| 319 | +} | 
| @@ -112,6 +112,16 @@ class AgentsController < ApplicationController | ||
| 112 | 112 | end | 
| 113 | 113 | end | 
| 114 | 114 |  | 
| 115 | + def destroy_memory | |
| 116 | + @agent = current_user.agents.find(params[:id]) | |
| 117 | +    @agent.update!(memory: {}) | |
| 118 | + | |
| 119 | + respond_to do |format| | |
| 120 | +      format.html { redirect_back "Memory erased for '#{@agent.name}'" } | |
| 121 | +      format.json { head :ok } | |
| 122 | + end | |
| 123 | + end | |
| 124 | + | |
| 115 | 125 | def show | 
| 116 | 126 | @agent = current_user.agents.find(params[:id]) | 
| 117 | 127 |  | 
| @@ -162,9 +162,13 @@ | ||
| 162 | 162 |                <pre><%= Utils.pretty_jsonify @agent.options || {} %></pre> | 
| 163 | 163 | </p> | 
| 164 | 164 |  | 
| 165 | - <p> | |
| 165 | + <p id="memory" data-agent-id="<%= @agent.id %>"> | |
| 166 | 166 | <b>Memory:</b> | 
| 167 | -              <pre><%= Utils.pretty_jsonify @agent.memory || {} %></pre> | |
| 167 | + <% if @agent.memory.present? %> | |
| 168 | + <i class="fa fa-spinner fa-spin spinner"></i> | |
| 169 | + <i class="fa fa-trash action-icon clear"></i> | |
| 170 | + <% end %> | |
| 171 | +              <pre class="memory"><%= Utils.pretty_jsonify @agent.memory || {} %></pre> | |
| 168 | 172 | </p> | 
| 169 | 173 | </div> | 
| 170 | 174 | </div> | 
| @@ -6,6 +6,7 @@ Huginn::Application.routes.draw do | ||
| 6 | 6 | post :handle_details_post | 
| 7 | 7 | put :leave_scenario | 
| 8 | 8 | delete :remove_events | 
| 9 | + delete :memory, action: :destroy_memory | |
| 9 | 10 | end | 
| 10 | 11 |  | 
| 11 | 12 | collection do |