smalruby-editor 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of smalruby-editor might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/javascripts/editor.js.coffee.erb +12 -11
- data/lib/smalruby_editor/version.rb +1 -1
- data/public/assets/{application-eff4fb09a71dae23dc9b3962bcd44fa8.js → application-ba0c47b4699119d7c75b88c4eef30e9a.js} +192 -100
- data/public/assets/application-ba0c47b4699119d7c75b88c4eef30e9a.js.gz +0 -0
- data/public/assets/application-f51ea0e777d97f12a8ce84308f31eb57.css.gz +0 -0
- data/public/assets/manifest-3bcabf5c85a81c33c1c52b6bf869bb16.json +1 -1
- data/spec/acceptance/standalone/save.feature +17 -4
- data/spec/steps/text_editor_steps.rb +6 -1
- metadata +4 -4
- data/public/assets/application-eff4fb09a71dae23dc9b3962bcd44fa8.js.gz +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b37c640353e2bd15d4b820cdc21bbd89ad3e8cb2
         | 
| 4 | 
            +
              data.tar.gz: 6101e70c546314f4b878cb621a92b0c1dd2df654
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 43da2382861dc2b6fd3166e605e7ba7fe1f25331c4bc86791a194ef616c0d29f93f4b9fe01b011b6203c3e7f04820a73ddc6752f233f42b27da08e3569d62254
         | 
| 7 | 
            +
              data.tar.gz: f3646f30ca01d17ffea8584bd36c29a972089b45a7f33e81c3d221b4d6ab07db0ccfc0e9baa522b93c91e7f7afdad8528d13a78e99a1b98fc37b50e215be39fb
         | 
| @@ -19,7 +19,7 @@ errorMessage = (msg, selector = '#messages') -> | |
| 19 19 | 
             
                .append('<h4><i class="icon-exclamation-sign"></i>エラー</h4>')
         | 
| 20 20 | 
             
                .append(msg)
         | 
| 21 21 | 
             
              $(selector).append(html)
         | 
| 22 | 
            -
              html.fadeIn(' | 
| 22 | 
            +
              html.fadeIn('slow')
         | 
| 23 23 |  | 
| 24 24 | 
             
            $ ->
         | 
| 25 25 | 
             
              saving = false
         | 
| @@ -47,7 +47,6 @@ $ -> | |
| 47 47 | 
             
                  $('#filename').focus()
         | 
| 48 48 | 
             
                else
         | 
| 49 49 | 
             
                  afterSave = ->
         | 
| 50 | 
            -
                    saving = true
         | 
| 51 50 | 
             
                    changed = false
         | 
| 52 51 | 
             
                    successMessage('セーブしました')
         | 
| 53 52 |  | 
| @@ -84,19 +83,21 @@ $ -> | |
| 84 83 | 
             
                        type: 'DELETE'
         | 
| 85 84 | 
             
                        dataType: 'json'
         | 
| 86 85 | 
             
                        success: (data, textStatus, jqXHR) ->
         | 
| 87 | 
            -
                          if data.source_code.error | 
| 88 | 
            -
                             | 
| 89 | 
            -
                               | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
                                 | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 86 | 
            +
                          if data.source_code.error
         | 
| 87 | 
            +
                            if confirm("前に#{filename}という名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!")
         | 
| 88 | 
            +
                              $.ajax
         | 
| 89 | 
            +
                                url: '/source_codes/write?force=1'
         | 
| 90 | 
            +
                                type: 'DELETE'
         | 
| 91 | 
            +
                                dataType: 'json'
         | 
| 92 | 
            +
                                success: (data, textStatus, jqXHR) ->
         | 
| 93 | 
            +
                                  afterSave()
         | 
| 94 | 
            +
                            else
         | 
| 95 | 
            +
                              successMessage('セーブをキャンセルしました')
         | 
| 96 96 | 
             
                          else
         | 
| 97 97 | 
             
                            afterSave()
         | 
| 98 98 | 
             
                      <% else %>
         | 
| 99 99 | 
             
                      afterSave()
         | 
| 100 | 
            +
                      saving = true
         | 
| 100 101 | 
             
                      $('#download-link').click()
         | 
| 101 102 | 
             
                      <% end %>
         | 
| 102 103 |  | 
| @@ -396,49 +396,78 @@ | |
| 396 396 |  | 
| 397 397 | 
             
            })( jQuery );
         | 
| 398 398 | 
             
            (function() {
         | 
| 399 | 
            -
              var CSRFToken, anchoredLink, browserCompatibleDocumentParser, browserIsntBuggy, browserSupportsPushState, cacheCurrentPage, cacheSize, changePage, constrainPageCacheTo, createDocument, crossOriginLink, currentState, executeScriptTags, extractLink, extractTitleAndBody, fetchHistory, fetchReplacement, handleClick, ignoreClick, initializeTurbolinks, installClickHandlerLast, loadedAssets, noTurbolink, nonHtmlLink, nonStandardClick, pageCache, pageChangePrevented, pagesCached, processResponse, recallScrollPosition, referer, reflectNewUrl, reflectRedirectedUrl, rememberCurrentState, rememberCurrentUrl, removeHash,  | 
| 400 | 
            -
                 | 
| 401 | 
            -
                 | 
| 399 | 
            +
              var CSRFToken, allowLinkExtensions, anchoredLink, browserCompatibleDocumentParser, browserIsntBuggy, browserSupportsCustomEvents, browserSupportsPushState, browserSupportsTurbolinks, cacheCurrentPage, cacheSize, changePage, constrainPageCacheTo, createDocument, crossOriginLink, currentState, enableTransitionCache, executeScriptTags, extractLink, extractTitleAndBody, fetch, fetchHistory, fetchReplacement, handleClick, historyStateIsDefined, htmlExtensions, ignoreClick, initializeTurbolinks, installClickHandlerLast, installDocumentReadyPageEventTriggers, installHistoryChangeHandler, installJqueryAjaxSuccessPageUpdateTrigger, loadedAssets, noTurbolink, nonHtmlLink, nonStandardClick, pageCache, pageChangePrevented, pagesCached, popCookie, processResponse, recallScrollPosition, referer, reflectNewUrl, reflectRedirectedUrl, rememberCurrentState, rememberCurrentUrl, rememberReferer, removeHash, removeHashForIE10compatiblity, removeNoscriptTags, requestMethodIsSafe, resetScrollPosition, targetLink, transitionCacheEnabled, transitionCacheFor, triggerEvent, visit, xhr, _ref,
         | 
| 400 | 
            +
                __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
         | 
| 401 | 
            +
                __slice = [].slice;
         | 
| 402 | 
            +
             | 
| 403 | 
            +
              pageCache = {};
         | 
| 402 404 |  | 
| 403 405 | 
             
              cacheSize = 10;
         | 
| 404 406 |  | 
| 405 | 
            -
               | 
| 407 | 
            +
              transitionCacheEnabled = false;
         | 
| 406 408 |  | 
| 407 | 
            -
               | 
| 409 | 
            +
              currentState = null;
         | 
| 408 410 |  | 
| 409 411 | 
             
              loadedAssets = null;
         | 
| 410 412 |  | 
| 411 | 
            -
               | 
| 413 | 
            +
              htmlExtensions = ['html'];
         | 
| 412 414 |  | 
| 413 | 
            -
               | 
| 415 | 
            +
              referer = null;
         | 
| 414 416 |  | 
| 415 | 
            -
               | 
| 417 | 
            +
              createDocument = null;
         | 
| 416 418 |  | 
| 417 419 | 
             
              xhr = null;
         | 
| 418 420 |  | 
| 419 | 
            -
               | 
| 420 | 
            -
                var  | 
| 421 | 
            -
                 | 
| 422 | 
            -
                 | 
| 421 | 
            +
              fetch = function(url) {
         | 
| 422 | 
            +
                var cachedPage;
         | 
| 423 | 
            +
                rememberReferer();
         | 
| 424 | 
            +
                cacheCurrentPage();
         | 
| 425 | 
            +
                reflectNewUrl(url);
         | 
| 426 | 
            +
                if (transitionCacheEnabled && (cachedPage = transitionCacheFor(url))) {
         | 
| 427 | 
            +
                  fetchHistory(cachedPage);
         | 
| 428 | 
            +
                  return fetchReplacement(url);
         | 
| 429 | 
            +
                } else {
         | 
| 430 | 
            +
                  return fetchReplacement(url, resetScrollPosition);
         | 
| 431 | 
            +
                }
         | 
| 432 | 
            +
              };
         | 
| 433 | 
            +
             | 
| 434 | 
            +
              transitionCacheFor = function(url) {
         | 
| 435 | 
            +
                var cachedPage;
         | 
| 436 | 
            +
                cachedPage = pageCache[url];
         | 
| 437 | 
            +
                if (cachedPage && !cachedPage.transitionCacheDisabled) {
         | 
| 438 | 
            +
                  return cachedPage;
         | 
| 439 | 
            +
                }
         | 
| 440 | 
            +
              };
         | 
| 441 | 
            +
             | 
| 442 | 
            +
              enableTransitionCache = function(enable) {
         | 
| 443 | 
            +
                if (enable == null) {
         | 
| 444 | 
            +
                  enable = true;
         | 
| 445 | 
            +
                }
         | 
| 446 | 
            +
                return transitionCacheEnabled = enable;
         | 
| 447 | 
            +
              };
         | 
| 448 | 
            +
             | 
| 449 | 
            +
              fetchReplacement = function(url, onLoadFunction) {
         | 
| 450 | 
            +
                var _this = this;
         | 
| 451 | 
            +
                if (onLoadFunction == null) {
         | 
| 452 | 
            +
                  onLoadFunction = function() {};
         | 
| 453 | 
            +
                }
         | 
| 454 | 
            +
                triggerEvent('page:fetch', {
         | 
| 455 | 
            +
                  url: url
         | 
| 456 | 
            +
                });
         | 
| 423 457 | 
             
                if (xhr != null) {
         | 
| 424 458 | 
             
                  xhr.abort();
         | 
| 425 459 | 
             
                }
         | 
| 426 460 | 
             
                xhr = new XMLHttpRequest;
         | 
| 427 | 
            -
                xhr.open('GET',  | 
| 461 | 
            +
                xhr.open('GET', removeHashForIE10compatiblity(url), true);
         | 
| 428 462 | 
             
                xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml');
         | 
| 429 463 | 
             
                xhr.setRequestHeader('X-XHR-Referer', referer);
         | 
| 430 464 | 
             
                xhr.onload = function() {
         | 
| 431 465 | 
             
                  var doc;
         | 
| 432 466 | 
             
                  triggerEvent('page:receive');
         | 
| 433 467 | 
             
                  if (doc = processResponse()) {
         | 
| 434 | 
            -
                    reflectNewUrl(url);
         | 
| 435 468 | 
             
                    changePage.apply(null, extractTitleAndBody(doc));
         | 
| 436 469 | 
             
                    reflectRedirectedUrl();
         | 
| 437 | 
            -
                     | 
| 438 | 
            -
                      document.location.href = document.location.href;
         | 
| 439 | 
            -
                    } else {
         | 
| 440 | 
            -
                      resetScrollPosition();
         | 
| 441 | 
            -
                    }
         | 
| 470 | 
            +
                    onLoadFunction();
         | 
| 442 471 | 
             
                    return triggerEvent('page:load');
         | 
| 443 472 | 
             
                  } else {
         | 
| 444 473 | 
             
                    return document.location.href = url;
         | 
| @@ -447,34 +476,30 @@ | |
| 447 476 | 
             
                xhr.onloadend = function() {
         | 
| 448 477 | 
             
                  return xhr = null;
         | 
| 449 478 | 
             
                };
         | 
| 450 | 
            -
                xhr.onabort = function() {
         | 
| 451 | 
            -
                  return rememberCurrentUrl();
         | 
| 452 | 
            -
                };
         | 
| 453 479 | 
             
                xhr.onerror = function() {
         | 
| 454 480 | 
             
                  return document.location.href = url;
         | 
| 455 481 | 
             
                };
         | 
| 456 482 | 
             
                return xhr.send();
         | 
| 457 483 | 
             
              };
         | 
| 458 484 |  | 
| 459 | 
            -
              fetchHistory = function( | 
| 460 | 
            -
                var page;
         | 
| 461 | 
            -
                cacheCurrentPage();
         | 
| 462 | 
            -
                page = pageCache[position];
         | 
| 485 | 
            +
              fetchHistory = function(cachedPage) {
         | 
| 463 486 | 
             
                if (xhr != null) {
         | 
| 464 487 | 
             
                  xhr.abort();
         | 
| 465 488 | 
             
                }
         | 
| 466 | 
            -
                changePage( | 
| 467 | 
            -
                recallScrollPosition( | 
| 489 | 
            +
                changePage(cachedPage.title, cachedPage.body);
         | 
| 490 | 
            +
                recallScrollPosition(cachedPage);
         | 
| 468 491 | 
             
                return triggerEvent('page:restore');
         | 
| 469 492 | 
             
              };
         | 
| 470 493 |  | 
| 471 494 | 
             
              cacheCurrentPage = function() {
         | 
| 472 | 
            -
                pageCache[currentState. | 
| 495 | 
            +
                pageCache[currentState.url] = {
         | 
| 473 496 | 
             
                  url: document.location.href,
         | 
| 474 497 | 
             
                  body: document.body,
         | 
| 475 498 | 
             
                  title: document.title,
         | 
| 476 499 | 
             
                  positionY: window.pageYOffset,
         | 
| 477 | 
            -
                  positionX: window.pageXOffset
         | 
| 500 | 
            +
                  positionX: window.pageXOffset,
         | 
| 501 | 
            +
                  cachedAt: new Date().getTime(),
         | 
| 502 | 
            +
                  transitionCacheDisabled: document.querySelector('[data-no-transition-cache]') != null
         | 
| 478 503 | 
             
                };
         | 
| 479 504 | 
             
                return constrainPageCacheTo(cacheSize);
         | 
| 480 505 | 
             
              };
         | 
| @@ -489,14 +514,23 @@ | |
| 489 514 | 
             
              };
         | 
| 490 515 |  | 
| 491 516 | 
             
              constrainPageCacheTo = function(limit) {
         | 
| 492 | 
            -
                var key,  | 
| 493 | 
            -
                 | 
| 494 | 
            -
             | 
| 495 | 
            -
                   | 
| 496 | 
            -
             | 
| 497 | 
            -
             | 
| 517 | 
            +
                var cacheTimesRecentFirst, key, pageCacheKeys, _i, _len, _results;
         | 
| 518 | 
            +
                pageCacheKeys = Object.keys(pageCache);
         | 
| 519 | 
            +
                cacheTimesRecentFirst = pageCacheKeys.map(function(url) {
         | 
| 520 | 
            +
                  return pageCache[url].cachedAt;
         | 
| 521 | 
            +
                }).sort(function(a, b) {
         | 
| 522 | 
            +
                  return b - a;
         | 
| 523 | 
            +
                });
         | 
| 524 | 
            +
                _results = [];
         | 
| 525 | 
            +
                for (_i = 0, _len = pageCacheKeys.length; _i < _len; _i++) {
         | 
| 526 | 
            +
                  key = pageCacheKeys[_i];
         | 
| 527 | 
            +
                  if (!(pageCache[key].cachedAt <= cacheTimesRecentFirst[limit])) {
         | 
| 528 | 
            +
                    continue;
         | 
| 498 529 | 
             
                  }
         | 
| 530 | 
            +
                  triggerEvent('page:expire', pageCache[key]);
         | 
| 531 | 
            +
                  _results.push(delete pageCache[key]);
         | 
| 499 532 | 
             
                }
         | 
| 533 | 
            +
                return _results;
         | 
| 500 534 | 
             
              };
         | 
| 501 535 |  | 
| 502 536 | 
             
              changePage = function(title, body, csrfToken, runScripts) {
         | 
| @@ -505,26 +539,26 @@ | |
| 505 539 | 
             
                if (csrfToken != null) {
         | 
| 506 540 | 
             
                  CSRFToken.update(csrfToken);
         | 
| 507 541 | 
             
                }
         | 
| 508 | 
            -
                removeNoscriptTags();
         | 
| 509 542 | 
             
                if (runScripts) {
         | 
| 510 543 | 
             
                  executeScriptTags();
         | 
| 511 544 | 
             
                }
         | 
| 512 545 | 
             
                currentState = window.history.state;
         | 
| 513 | 
            -
                 | 
| 546 | 
            +
                triggerEvent('page:change');
         | 
| 547 | 
            +
                return triggerEvent('page:update');
         | 
| 514 548 | 
             
              };
         | 
| 515 549 |  | 
| 516 550 | 
             
              executeScriptTags = function() {
         | 
| 517 | 
            -
                var attr, copy, nextSibling, parentNode, script, scripts, _i, _j, _len, _len1,  | 
| 551 | 
            +
                var attr, copy, nextSibling, parentNode, script, scripts, _i, _j, _len, _len1, _ref, _ref1;
         | 
| 518 552 | 
             
                scripts = Array.prototype.slice.call(document.body.querySelectorAll('script:not([data-turbolinks-eval="false"])'));
         | 
| 519 553 | 
             
                for (_i = 0, _len = scripts.length; _i < _len; _i++) {
         | 
| 520 554 | 
             
                  script = scripts[_i];
         | 
| 521 | 
            -
                  if (!(( | 
| 555 | 
            +
                  if (!((_ref = script.type) === '' || _ref === 'text/javascript')) {
         | 
| 522 556 | 
             
                    continue;
         | 
| 523 557 | 
             
                  }
         | 
| 524 558 | 
             
                  copy = document.createElement('script');
         | 
| 525 | 
            -
                   | 
| 526 | 
            -
                  for (_j = 0, _len1 =  | 
| 527 | 
            -
                    attr =  | 
| 559 | 
            +
                  _ref1 = script.attributes;
         | 
| 560 | 
            +
                  for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
         | 
| 561 | 
            +
                    attr = _ref1[_j];
         | 
| 528 562 | 
             
                    copy.setAttribute(attr.name, attr.value);
         | 
| 529 563 | 
             
                  }
         | 
| 530 564 | 
             
                  copy.appendChild(document.createTextNode(script.innerHTML));
         | 
| @@ -534,20 +568,16 @@ | |
| 534 568 | 
             
                }
         | 
| 535 569 | 
             
              };
         | 
| 536 570 |  | 
| 537 | 
            -
              removeNoscriptTags = function() {
         | 
| 538 | 
            -
                 | 
| 539 | 
            -
                 | 
| 540 | 
            -
                for (_i = 0, _len = noscriptTags.length; _i < _len; _i++) {
         | 
| 541 | 
            -
                  noscript = noscriptTags[_i];
         | 
| 542 | 
            -
                  noscript.parentNode.removeChild(noscript);
         | 
| 543 | 
            -
                }
         | 
| 571 | 
            +
              removeNoscriptTags = function(node) {
         | 
| 572 | 
            +
                node.innerHTML = node.innerHTML.replace(/<noscript[\S\s]*?<\/noscript>/ig, '');
         | 
| 573 | 
            +
                return node;
         | 
| 544 574 | 
             
              };
         | 
| 545 575 |  | 
| 546 576 | 
             
              reflectNewUrl = function(url) {
         | 
| 547 577 | 
             
                if (url !== referer) {
         | 
| 548 578 | 
             
                  return window.history.pushState({
         | 
| 549 579 | 
             
                    turbolinks: true,
         | 
| 550 | 
            -
                     | 
| 580 | 
            +
                    url: url
         | 
| 551 581 | 
             
                  }, '', url);
         | 
| 552 582 | 
             
                }
         | 
| 553 583 | 
             
              };
         | 
| @@ -560,10 +590,14 @@ | |
| 560 590 | 
             
                }
         | 
| 561 591 | 
             
              };
         | 
| 562 592 |  | 
| 593 | 
            +
              rememberReferer = function() {
         | 
| 594 | 
            +
                return referer = document.location.href;
         | 
| 595 | 
            +
              };
         | 
| 596 | 
            +
             | 
| 563 597 | 
             
              rememberCurrentUrl = function() {
         | 
| 564 598 | 
             
                return window.history.replaceState({
         | 
| 565 599 | 
             
                  turbolinks: true,
         | 
| 566 | 
            -
                   | 
| 600 | 
            +
                  url: document.location.href
         | 
| 567 601 | 
             
                }, '', document.location.href);
         | 
| 568 602 | 
             
              };
         | 
| 569 603 |  | 
| @@ -576,7 +610,15 @@ | |
| 576 610 | 
             
              };
         | 
| 577 611 |  | 
| 578 612 | 
             
              resetScrollPosition = function() {
         | 
| 579 | 
            -
                 | 
| 613 | 
            +
                if (document.location.hash) {
         | 
| 614 | 
            +
                  return document.location.href = document.location.href;
         | 
| 615 | 
            +
                } else {
         | 
| 616 | 
            +
                  return window.scrollTo(0, 0);
         | 
| 617 | 
            +
                }
         | 
| 618 | 
            +
              };
         | 
| 619 | 
            +
             | 
| 620 | 
            +
              removeHashForIE10compatiblity = function(url) {
         | 
| 621 | 
            +
                return removeHash(url);
         | 
| 580 622 | 
             
              };
         | 
| 581 623 |  | 
| 582 624 | 
             
              removeHash = function(url) {
         | 
| @@ -589,9 +631,19 @@ | |
| 589 631 | 
             
                return link.href.replace(link.hash, '');
         | 
| 590 632 | 
             
              };
         | 
| 591 633 |  | 
| 592 | 
            -
               | 
| 634 | 
            +
              popCookie = function(name) {
         | 
| 635 | 
            +
                var value, _ref;
         | 
| 636 | 
            +
                value = ((_ref = document.cookie.match(new RegExp(name + "=(\\w+)"))) != null ? _ref[1].toUpperCase() : void 0) || '';
         | 
| 637 | 
            +
                document.cookie = name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/';
         | 
| 638 | 
            +
                return value;
         | 
| 639 | 
            +
              };
         | 
| 640 | 
            +
             | 
| 641 | 
            +
              triggerEvent = function(name, data) {
         | 
| 593 642 | 
             
                var event;
         | 
| 594 643 | 
             
                event = document.createEvent('Events');
         | 
| 644 | 
            +
                if (data) {
         | 
| 645 | 
            +
                  event.data = data;
         | 
| 646 | 
            +
                }
         | 
| 595 647 | 
             
                event.initEvent(name, true, true);
         | 
| 596 648 | 
             
                return document.dispatchEvent(event);
         | 
| 597 649 | 
             
              };
         | 
| @@ -603,18 +655,18 @@ | |
| 603 655 | 
             
              processResponse = function() {
         | 
| 604 656 | 
             
                var assetsChanged, clientOrServerError, doc, extractTrackAssets, intersection, validContent;
         | 
| 605 657 | 
             
                clientOrServerError = function() {
         | 
| 606 | 
            -
                  var  | 
| 607 | 
            -
                  return (400 <= ( | 
| 658 | 
            +
                  var _ref;
         | 
| 659 | 
            +
                  return (400 <= (_ref = xhr.status) && _ref < 600);
         | 
| 608 660 | 
             
                };
         | 
| 609 661 | 
             
                validContent = function() {
         | 
| 610 662 | 
             
                  return xhr.getResponseHeader('Content-Type').match(/^(?:text\/html|application\/xhtml\+xml|application\/xml)(?:;|$)/);
         | 
| 611 663 | 
             
                };
         | 
| 612 664 | 
             
                extractTrackAssets = function(doc) {
         | 
| 613 | 
            -
                  var node, _i, _len,  | 
| 614 | 
            -
                   | 
| 665 | 
            +
                  var node, _i, _len, _ref, _results;
         | 
| 666 | 
            +
                  _ref = doc.head.childNodes;
         | 
| 615 667 | 
             
                  _results = [];
         | 
| 616 | 
            -
                  for (_i = 0, _len =  | 
| 617 | 
            -
                    node =  | 
| 668 | 
            +
                  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
         | 
| 669 | 
            +
                    node = _ref[_i];
         | 
| 618 670 | 
             
                    if ((typeof node.getAttribute === "function" ? node.getAttribute('data-turbolinks-track') : void 0) != null) {
         | 
| 619 671 | 
             
                      _results.push(node.getAttribute('src') || node.getAttribute('href'));
         | 
| 620 672 | 
             
                    }
         | 
| @@ -628,9 +680,9 @@ | |
| 628 680 | 
             
                  return fetchedAssets.length !== loadedAssets.length || intersection(fetchedAssets, loadedAssets).length !== loadedAssets.length;
         | 
| 629 681 | 
             
                };
         | 
| 630 682 | 
             
                intersection = function(a, b) {
         | 
| 631 | 
            -
                  var value, _i, _len,  | 
| 683 | 
            +
                  var value, _i, _len, _ref, _results;
         | 
| 632 684 | 
             
                  if (a.length > b.length) {
         | 
| 633 | 
            -
                     | 
| 685 | 
            +
                    _ref = [b, a], a = _ref[0], b = _ref[1];
         | 
| 634 686 | 
             
                  }
         | 
| 635 687 | 
             
                  _results = [];
         | 
| 636 688 | 
             
                  for (_i = 0, _len = a.length; _i < _len; _i++) {
         | 
| @@ -652,7 +704,7 @@ | |
| 652 704 | 
             
              extractTitleAndBody = function(doc) {
         | 
| 653 705 | 
             
                var title;
         | 
| 654 706 | 
             
                title = doc.querySelector('title');
         | 
| 655 | 
            -
                return [title != null ? title.textContent : void 0, doc.body, CSRFToken.get(doc).token, 'runScripts'];
         | 
| 707 | 
            +
                return [title != null ? title.textContent : void 0, removeNoscriptTags(doc.body), CSRFToken.get(doc).token, 'runScripts'];
         | 
| 656 708 | 
             
              };
         | 
| 657 709 |  | 
| 658 710 | 
             
              CSRFToken = {
         | 
| @@ -676,7 +728,7 @@ | |
| 676 728 | 
             
              };
         | 
| 677 729 |  | 
| 678 730 | 
             
              browserCompatibleDocumentParser = function() {
         | 
| 679 | 
            -
                var createDocumentUsingDOM, createDocumentUsingParser, createDocumentUsingWrite, e, testDoc,  | 
| 731 | 
            +
                var createDocumentUsingDOM, createDocumentUsingParser, createDocumentUsingWrite, e, testDoc, _ref;
         | 
| 680 732 | 
             
                createDocumentUsingParser = function(html) {
         | 
| 681 733 | 
             
                  return (new DOMParser).parseFromString(html, 'text/html');
         | 
| 682 734 | 
             
                };
         | 
| @@ -704,7 +756,7 @@ | |
| 704 756 | 
             
                  testDoc = createDocumentUsingDOM('<html><body><p>test');
         | 
| 705 757 | 
             
                  return createDocumentUsingDOM;
         | 
| 706 758 | 
             
                } finally {
         | 
| 707 | 
            -
                  if ((testDoc != null ? ( | 
| 759 | 
            +
                  if ((testDoc != null ? (_ref = testDoc.body) != null ? _ref.childNodes.length : void 0 : void 0) !== 1) {
         | 
| 708 760 | 
             
                    return createDocumentUsingWrite;
         | 
| 709 761 | 
             
                  }
         | 
| 710 762 | 
             
                }
         | 
| @@ -750,7 +802,7 @@ | |
| 750 802 | 
             
              nonHtmlLink = function(link) {
         | 
| 751 803 | 
             
                var url;
         | 
| 752 804 | 
             
                url = removeHash(link);
         | 
| 753 | 
            -
                return url.match(/\.[a-z]+(\?.*)?$/g) && !url.match( | 
| 805 | 
            +
                return url.match(/\.[a-z]+(\?.*)?$/g) && !url.match(new RegExp("\\.(?:" + (htmlExtensions.join('|')) + ")?(\\?.*)?$", 'g'));
         | 
| 754 806 | 
             
              };
         | 
| 755 807 |  | 
| 756 808 | 
             
              noTurbolink = function(link) {
         | 
| @@ -774,36 +826,73 @@ | |
| 774 826 | 
             
                return crossOriginLink(link) || anchoredLink(link) || nonHtmlLink(link) || noTurbolink(link) || targetLink(link) || nonStandardClick(event);
         | 
| 775 827 | 
             
              };
         | 
| 776 828 |  | 
| 829 | 
            +
              allowLinkExtensions = function() {
         | 
| 830 | 
            +
                var extension, extensions, _i, _len;
         | 
| 831 | 
            +
                extensions = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
         | 
| 832 | 
            +
                for (_i = 0, _len = extensions.length; _i < _len; _i++) {
         | 
| 833 | 
            +
                  extension = extensions[_i];
         | 
| 834 | 
            +
                  htmlExtensions.push(extension);
         | 
| 835 | 
            +
                }
         | 
| 836 | 
            +
                return htmlExtensions;
         | 
| 837 | 
            +
              };
         | 
| 838 | 
            +
             | 
| 839 | 
            +
              installDocumentReadyPageEventTriggers = function() {
         | 
| 840 | 
            +
                return document.addEventListener('DOMContentLoaded', (function() {
         | 
| 841 | 
            +
                  triggerEvent('page:change');
         | 
| 842 | 
            +
                  return triggerEvent('page:update');
         | 
| 843 | 
            +
                }), true);
         | 
| 844 | 
            +
              };
         | 
| 845 | 
            +
             | 
| 846 | 
            +
              installJqueryAjaxSuccessPageUpdateTrigger = function() {
         | 
| 847 | 
            +
                if (typeof jQuery !== 'undefined') {
         | 
| 848 | 
            +
                  return jQuery(document).on('ajaxSuccess', function(event, xhr, settings) {
         | 
| 849 | 
            +
                    if (!jQuery.trim(xhr.responseText)) {
         | 
| 850 | 
            +
                      return;
         | 
| 851 | 
            +
                    }
         | 
| 852 | 
            +
                    return triggerEvent('page:update');
         | 
| 853 | 
            +
                  });
         | 
| 854 | 
            +
                }
         | 
| 855 | 
            +
              };
         | 
| 856 | 
            +
             | 
| 857 | 
            +
              installHistoryChangeHandler = function(event) {
         | 
| 858 | 
            +
                var cachedPage, _ref;
         | 
| 859 | 
            +
                if ((_ref = event.state) != null ? _ref.turbolinks : void 0) {
         | 
| 860 | 
            +
                  if (cachedPage = pageCache[event.state.url]) {
         | 
| 861 | 
            +
                    cacheCurrentPage();
         | 
| 862 | 
            +
                    return fetchHistory(cachedPage);
         | 
| 863 | 
            +
                  } else {
         | 
| 864 | 
            +
                    return visit(event.target.location.href);
         | 
| 865 | 
            +
                  }
         | 
| 866 | 
            +
                }
         | 
| 867 | 
            +
              };
         | 
| 868 | 
            +
             | 
| 777 869 | 
             
              initializeTurbolinks = function() {
         | 
| 778 870 | 
             
                rememberCurrentUrl();
         | 
| 779 871 | 
             
                rememberCurrentState();
         | 
| 780 872 | 
             
                createDocument = browserCompatibleDocumentParser();
         | 
| 781 873 | 
             
                document.addEventListener('click', installClickHandlerLast, true);
         | 
| 782 | 
            -
                return window.addEventListener('popstate',  | 
| 783 | 
            -
                  var state;
         | 
| 784 | 
            -
                  state = event.state;
         | 
| 785 | 
            -
                  if (state != null ? state.turbolinks : void 0) {
         | 
| 786 | 
            -
                    if (pageCache[state.position]) {
         | 
| 787 | 
            -
                      return fetchHistory(state.position);
         | 
| 788 | 
            -
                    } else {
         | 
| 789 | 
            -
                      return visit(event.target.location.href);
         | 
| 790 | 
            -
                    }
         | 
| 791 | 
            -
                  }
         | 
| 792 | 
            -
                }, false);
         | 
| 874 | 
            +
                return window.addEventListener('popstate', installHistoryChangeHandler, false);
         | 
| 793 875 | 
             
              };
         | 
| 794 876 |  | 
| 795 | 
            -
               | 
| 877 | 
            +
              historyStateIsDefined = window.history.state !== void 0 || navigator.userAgent.match(/Firefox\/26/);
         | 
| 878 | 
            +
             | 
| 879 | 
            +
              browserSupportsPushState = window.history && window.history.pushState && window.history.replaceState && historyStateIsDefined;
         | 
| 796 880 |  | 
| 797 881 | 
             
              browserIsntBuggy = !navigator.userAgent.match(/CriOS\//);
         | 
| 798 882 |  | 
| 799 | 
            -
              requestMethodIsSafe =  | 
| 883 | 
            +
              requestMethodIsSafe = (_ref = popCookie('request_method')) === 'GET' || _ref === '';
         | 
| 800 884 |  | 
| 801 | 
            -
               | 
| 802 | 
            -
             | 
| 803 | 
            -
             | 
| 804 | 
            -
             | 
| 805 | 
            -
             | 
| 806 | 
            -
                 | 
| 885 | 
            +
              browserSupportsTurbolinks = browserSupportsPushState && browserIsntBuggy && requestMethodIsSafe;
         | 
| 886 | 
            +
             | 
| 887 | 
            +
              browserSupportsCustomEvents = document.addEventListener && document.createEvent;
         | 
| 888 | 
            +
             | 
| 889 | 
            +
              if (browserSupportsCustomEvents) {
         | 
| 890 | 
            +
                installDocumentReadyPageEventTriggers();
         | 
| 891 | 
            +
                installJqueryAjaxSuccessPageUpdateTrigger();
         | 
| 892 | 
            +
              }
         | 
| 893 | 
            +
             | 
| 894 | 
            +
              if (browserSupportsTurbolinks) {
         | 
| 895 | 
            +
                visit = fetch;
         | 
| 807 896 | 
             
                initializeTurbolinks();
         | 
| 808 897 | 
             
              } else {
         | 
| 809 898 | 
             
                visit = function(url) {
         | 
| @@ -813,7 +902,10 @@ | |
| 813 902 |  | 
| 814 903 | 
             
              this.Turbolinks = {
         | 
| 815 904 | 
             
                visit: visit,
         | 
| 816 | 
            -
                pagesCached: pagesCached
         | 
| 905 | 
            +
                pagesCached: pagesCached,
         | 
| 906 | 
            +
                enableTransitionCache: enableTransitionCache,
         | 
| 907 | 
            +
                allowLinkExtensions: allowLinkExtensions,
         | 
| 908 | 
            +
                supported: browserSupportsTurbolinks
         | 
| 817 909 | 
             
              };
         | 
| 818 910 |  | 
| 819 911 | 
             
            }).call(this);
         | 
| @@ -5095,7 +5187,7 @@ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { | |
| 5095 5187 | 
             
                }
         | 
| 5096 5188 | 
             
                html = $('<div class="alert alert-error" style="display: none">').append('<button type="button" class="close" data-dismiss="alert">×</button>').append('<h4><i class="icon-exclamation-sign"></i>エラー</h4>').append(msg);
         | 
| 5097 5189 | 
             
                $(selector).append(html);
         | 
| 5098 | 
            -
                return html.fadeIn(' | 
| 5190 | 
            +
                return html.fadeIn('slow');
         | 
| 5099 5191 | 
             
              };
         | 
| 5100 5192 |  | 
| 5101 5193 | 
             
              $(function() {
         | 
| @@ -5122,7 +5214,6 @@ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { | |
| 5122 5214 | 
             
                    return $('#filename').focus();
         | 
| 5123 5215 | 
             
                  } else {
         | 
| 5124 5216 | 
             
                    afterSave = function() {
         | 
| 5125 | 
            -
                      saving = true;
         | 
| 5126 5217 | 
             
                      changed = false;
         | 
| 5127 5218 | 
             
                      successMessage('セーブしました');
         | 
| 5128 5219 | 
             
                      return $.ajax({
         | 
| @@ -5172,18 +5263,19 @@ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { | |
| 5172 5263 | 
             
                          type: 'DELETE',
         | 
| 5173 5264 | 
             
                          dataType: 'json',
         | 
| 5174 5265 | 
             
                          success: function(data, textStatus, jqXHR) {
         | 
| 5175 | 
            -
                            if (data.source_code.error | 
| 5176 | 
            -
                               | 
| 5177 | 
            -
                                 | 
| 5178 | 
            -
             | 
| 5179 | 
            -
             | 
| 5180 | 
            -
                                   | 
| 5181 | 
            -
             | 
| 5182 | 
            -
             | 
| 5183 | 
            -
             | 
| 5184 | 
            -
             | 
| 5185 | 
            -
             | 
| 5186 | 
            -
             | 
| 5266 | 
            +
                            if (data.source_code.error) {
         | 
| 5267 | 
            +
                              if (confirm("前に" + filename + "という名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!")) {
         | 
| 5268 | 
            +
                                return $.ajax({
         | 
| 5269 | 
            +
                                  url: '/source_codes/write?force=1',
         | 
| 5270 | 
            +
                                  type: 'DELETE',
         | 
| 5271 | 
            +
                                  dataType: 'json',
         | 
| 5272 | 
            +
                                  success: function(data, textStatus, jqXHR) {
         | 
| 5273 | 
            +
                                    return afterSave();
         | 
| 5274 | 
            +
                                  }
         | 
| 5275 | 
            +
                                });
         | 
| 5276 | 
            +
                              } else {
         | 
| 5277 | 
            +
                                return successMessage('セーブをキャンセルしました');
         | 
| 5278 | 
            +
                              }
         | 
| 5187 5279 | 
             
                            } else {
         | 
| 5188 5280 | 
             
                              return afterSave();
         | 
| 5189 5281 | 
             
                            }
         | 
| Binary file | 
| Binary file | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"files":{"favicon-c7ae857bb9d06de8742ae2d337157e83.ico":{"logical_path":"favicon.ico","mtime":"2013-11-25T21:05:22+09:00","size":16398,"digest":"c7ae857bb9d06de8742ae2d337157e83"},"application-13c48477888bb9c50ee5d1ba2193890f.js":{"logical_path":"application.js","mtime":"2014-01-11T14:04:20+09:00","size":601007,"digest":"13c48477888bb9c50ee5d1ba2193890f"},"application-f51ea0e777d97f12a8ce84308f31eb57.css":{"logical_path":"application.css","mtime":" | 
| 1 | 
            +
            {"files":{"favicon-c7ae857bb9d06de8742ae2d337157e83.ico":{"logical_path":"favicon.ico","mtime":"2013-11-25T21:05:22+09:00","size":16398,"digest":"c7ae857bb9d06de8742ae2d337157e83"},"application-13c48477888bb9c50ee5d1ba2193890f.js":{"logical_path":"application.js","mtime":"2014-01-11T14:04:20+09:00","size":601007,"digest":"13c48477888bb9c50ee5d1ba2193890f"},"application-f51ea0e777d97f12a8ce84308f31eb57.css":{"logical_path":"application.css","mtime":"2014-01-21T01:58:55+09:00","size":104182,"digest":"f51ea0e777d97f12a8ce84308f31eb57"},"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif":{"logical_path":"loading.gif","mtime":"2014-01-03T14:44:55+09:00","size":3897,"digest":"e8e6dd7833131c92a6c3b9c8ccc6a6ac"},"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif":{"logical_path":"progressbar.gif","mtime":"2014-01-03T14:44:55+09:00","size":3323,"digest":"82023a146fba2a0f6d925629ed2b09c5"},"application-a50281f6a3e2eef79882cacb6d107c26.js":{"logical_path":"application.js","mtime":"2014-01-13T17:53:01+09:00","size":600793,"digest":"a50281f6a3e2eef79882cacb6d107c26"},"application-eff4fb09a71dae23dc9b3962bcd44fa8.js":{"logical_path":"application.js","mtime":"2014-01-15T23:08:51+09:00","size":600764,"digest":"eff4fb09a71dae23dc9b3962bcd44fa8"},"application-c3ceffcb1cbe2098c7caaa15f8e518c9.js":{"logical_path":"application.js","mtime":"2014-01-20T22:08:05+09:00","size":600858,"digest":"c3ceffcb1cbe2098c7caaa15f8e518c9"},"application-e4088c39fcdcc35e9a5037118afb59e7.js":{"logical_path":"application.js","mtime":"2014-01-20T22:27:19+09:00","size":600833,"digest":"e4088c39fcdcc35e9a5037118afb59e7"},"application-ba0c47b4699119d7c75b88c4eef30e9a.js":{"logical_path":"application.js","mtime":"2014-01-21T01:58:55+09:00","size":603960,"digest":"ba0c47b4699119d7c75b88c4eef30e9a"}},"assets":{"favicon.ico":"favicon-c7ae857bb9d06de8742ae2d337157e83.ico","application.js":"application-ba0c47b4699119d7c75b88c4eef30e9a.js","application.css":"application-f51ea0e777d97f12a8ce84308f31eb57.css","loading.gif":"loading-e8e6dd7833131c92a6c3b9c8ccc6a6ac.gif","progressbar.gif":"progressbar-82023a146fba2a0f6d925629ed2b09c5.gif"}}
         | 
| @@ -15,7 +15,7 @@ | |
| 15 15 | 
             
                かつ ホームディレクトリの "01.rb" の内容が "puts 'Hello, World!'" であること
         | 
| 16 16 | 
             
                かつ "メッセージ" に "セーブしました" を含むこと
         | 
| 17 17 |  | 
| 18 | 
            -
              シナリオ:  | 
| 18 | 
            +
              シナリオ: ローカルマシンに同じ名前のプログラムがある状態でセーブボタンを押して上書き保存する
         | 
| 19 19 | 
             
                前提 "エディタ" 画面を表示する
         | 
| 20 20 | 
             
                かつ ホームディレクトリに "puts 'Hello, World!'" という内容の "01.rb" が存在する
         | 
| 21 21 | 
             
                かつ テキストエディタに "n = 0" を入力済みである
         | 
| @@ -23,10 +23,23 @@ | |
| 23 23 |  | 
| 24 24 | 
             
                もし "セーブボタン" をクリックする
         | 
| 25 25 | 
             
                かつ JavaScriptによるリクエストが終わるまで待つ
         | 
| 26 | 
            +
                かつ JavaScriptによるリクエストが終わるまで待つ
         | 
| 26 27 |  | 
| 27 28 | 
             
                ならば 確認メッセージ "前に01.rbという名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!" を表示すること
         | 
| 28 | 
            -
                かつ  | 
| 29 | 
            +
                かつ "メッセージ" に "セーブしました" を含むこと
         | 
| 30 | 
            +
                かつ ホームディレクトリの "01.rb" の内容が "n = 0" であること
         | 
| 29 31 |  | 
| 30 | 
            -
             | 
| 32 | 
            +
              シナリオ: ローカルマシンに同じ名前のプログラムがある状態でセーブボタンを押すが、キャンセルして上書き保存をしない
         | 
| 33 | 
            +
                前提 "エディタ" 画面を表示する
         | 
| 34 | 
            +
                かつ ホームディレクトリに "puts 'Hello, World!'" という内容の "01.rb" が存在する
         | 
| 35 | 
            +
                かつ テキストエディタに "n = 0" を入力済みである
         | 
| 36 | 
            +
                かつ プログラムの名前に "01.rb" を指定する
         | 
| 37 | 
            +
                かつ 確認ダイアログをキャンセルするようにしておく
         | 
| 31 38 |  | 
| 32 | 
            -
                 | 
| 39 | 
            +
                もし "セーブボタン" をクリックする
         | 
| 40 | 
            +
                かつ JavaScriptによるリクエストが終わるまで待つ
         | 
| 41 | 
            +
                かつ JavaScriptによるリクエストが終わるまで待つ
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                ならば 確認メッセージ "前に01.rbという名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!" を表示すること
         | 
| 44 | 
            +
                かつ "メッセージ" に "セーブをキャンセルしました" を含むこと
         | 
| 45 | 
            +
                かつ ホームディレクトリの "01.rb" の内容が "puts 'Hello, World!'" であること
         | 
| @@ -4,12 +4,13 @@ step ':name にアクセスする' do |name| | |
| 4 4 | 
             
              visit NAME_INFO[name][:path]
         | 
| 5 5 |  | 
| 6 6 | 
             
              if poltergeist?
         | 
| 7 | 
            +
                page.execute_script('window.confirmResult = true')
         | 
| 7 8 | 
             
                page.execute_script(<<-JS)
         | 
| 8 9 | 
             
                  if (window.confirmMsg == undefined) {
         | 
| 9 10 | 
             
                    window.confirmMsg = null;
         | 
| 10 11 | 
             
                    window.confirm = function(msg) {
         | 
| 11 12 | 
             
                      window.confirmMsg = msg;
         | 
| 12 | 
            -
                      return  | 
| 13 | 
            +
                      return window.confirmResult;
         | 
| 13 14 | 
             
                    }
         | 
| 14 15 | 
             
                  }
         | 
| 15 16 | 
             
                JS
         | 
| @@ -128,6 +129,10 @@ step '警告ダイアログの :name ボタンをクリックする' do |name| | |
| 128 129 | 
             
              end
         | 
| 129 130 | 
             
            end
         | 
| 130 131 |  | 
| 132 | 
            +
            step '確認ダイアログをキャンセルするようにしておく' do
         | 
| 133 | 
            +
              page.execute_script('window.confirmResult = false') if poltergeist?
         | 
| 134 | 
            +
            end
         | 
| 135 | 
            +
             | 
| 131 136 | 
             
            step '確認メッセージ :message を表示すること' do |message|
         | 
| 132 137 | 
             
              message.gsub!('\n', "\n")
         | 
| 133 138 | 
             
              if poltergeist?
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: smalruby-editor
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.12
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Kouji Takao
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-01- | 
| 11 | 
            +
            date: 2014-01-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rails
         | 
| @@ -361,8 +361,8 @@ files: | |
| 361 361 | 
             
            - spec/turnip_helper.rb
         | 
| 362 362 | 
             
            - vendor/assets/javascripts/.keep
         | 
| 363 363 | 
             
            - vendor/assets/stylesheets/.keep
         | 
| 364 | 
            -
            - public/assets/application- | 
| 365 | 
            -
            - public/assets/application- | 
| 364 | 
            +
            - public/assets/application-ba0c47b4699119d7c75b88c4eef30e9a.js
         | 
| 365 | 
            +
            - public/assets/application-ba0c47b4699119d7c75b88c4eef30e9a.js.gz
         | 
| 366 366 | 
             
            - public/assets/application-f51ea0e777d97f12a8ce84308f31eb57.css
         | 
| 367 367 | 
             
            - public/assets/application-f51ea0e777d97f12a8ce84308f31eb57.css.gz
         | 
| 368 368 | 
             
            - public/assets/favicon-c7ae857bb9d06de8742ae2d337157e83.ico
         | 
| Binary file |