Commit Graph

1080 Commits (0823c79b5479434053e7ef0f80becd7a218a1c13)

Author SHA1 Message Date
Marcin Kulik 82fa03863d Adjust Snapshot#crop to work on already optimized lines 11 years ago
Marcin Kulik ff153fff1a Make Terminal return already optimized snapshot 11 years ago
Marcin Kulik 0e2c1784c6 Use terminal binary as a base for Terminal 11 years ago
Marcin Kulik e537c1b78a Only release terminal if it is not nil 11 years ago
Marcin Kulik e862acedb7 Animation frames generation on the backend 11 years ago
Marcin Kulik bc6e1ddc3d Make implementation of Stdout more readable 11 years ago
Marcin Kulik 9e152c3172 Sanitize all characters coming from TSM::Screen#draw
It happens that libtsm's screen_draw returns a character that can't be
properly encoded as utf-8. As what we get is only meant to be displayed
and not interpreted we can replace these invalid characters with a
questio mark, which is a common practice for printing invalid chars.
11 years ago
Marcin Kulik 26801d207f Make Asciicast use BufferedStdout instead of Stdout 11 years ago
Marcin Kulik c3fc452b91 Make Grid#crop easier to read 11 years ago
Marcin Kulik 731fb11e8b Simplify Grid#trailing_empty_lines implementation 11 years ago
Marcin Kulik b47fa27968 Refactor Snapshot to use Grid under the hood 11 years ago
Marcin Kulik d324200b01 Add BufferedStdout class whose #each yields at 60 hz tops 11 years ago
Marcin Kulik c775bc8b06 Use less spans for thumbnail rendering 11 years ago
Marcin Kulik 31a880b7aa Simplify Snapshot and its presenter 11 years ago
Marcin Kulik 34b39d0db3 Simplify the structure returned by Terminal#snapshot
Each screen character is in its own, separate cell now. In addition the char
attributes don't include attributes that are "falsy".
11 years ago
Marcin Kulik 065e2cbc30 Split AsciicastStreamer#attributes_for_streaming into smaller methods 11 years ago
Marcin Kulik 731751650c Keep the lines shorther than 80 chars 11 years ago
Marcin Kulik cdc2f01753 Find or build user from omniauth hash in the middleware 11 years ago
Marcin Kulik 40856933aa Support "blink" attribute in the thumbnails 11 years ago
Marcin Kulik a53c8de5b9 Pass paths to decompressed stdout files to Stdout 11 years ago
Marcin Kulik cf3e812e8e Move duration info below the thumbnail 11 years ago
Marcin Kulik bae9bfdbc7 Use correct singular/plural form for asciicast count 11 years ago
Marcin Kulik 13119b2987 Display asciicast length on thumbnails 11 years ago
Marcin Kulik 44a7b0788e Convert asciicasts#_preview to slim 11 years ago
Marcin Kulik 49a2abe32b Make the "when by whom" font smaller 11 years ago
Marcin Kulik abe0b77bcd Convert asciicast#index to slim 11 years ago
Marcin Kulik 562cd0ef0b Add "Show more" link on the homepage 11 years ago
Marcin Kulik 5c141003a1 Use "asciicast" over "Asciicast" in UI 11 years ago
Marcin Kulik 2e9b0a4718 Remove boring empty trailing lines from thumbnails 11 years ago
Marcin Kulik 9086aae060 Remove unused code 11 years ago
Marcin Kulik 6acea6da70 Use tilde prefix for nickname only in profile url 11 years ago
Marcin Kulik 4bb61b614f Prevent bots from following Edit links 11 years ago
Marcin Kulik 452f5869cf Fix Bzip2Uploader#decompressed_path for S3 storage 11 years ago
Marcin Kulik 869ca9d896 Adjust JS player to new asciicast JSON representation 11 years ago
Marcin Kulik 6db65b2a6c Serve asciicast as JSON in chunks 11 years ago
Marcin Kulik 7e1b41dfef Code reformating in TimingParser 11 years ago
Marcin Kulik d21be98a5c Adjust SnapshotCreator to the latest API changes in Terminal and Stdout 11 years ago
Marcin Kulik 0c3494d174 Require explicit call to Terminal#snapshot for getting the snapshot 11 years ago
Marcin Kulik 6c8dbf4173 Make Stdout provide data in chunks 11 years ago
Marcin Kulik fa4c5e4664 Replace Bzip2Uploader#decompressed with #decompressed_path 11 years ago
Marcin Kulik 40da1823d6 Do not send X-Frame-Options header in embeddable widget action 11 years ago
Marcin Kulik c22cb1cdcc Get rid of the asciicast comments that are not used anymore 11 years ago
Marcin Kulik 20645271a1 Update models and helpers to use new Rails 4 syntax 11 years ago
Marcin Kulik 3f879e79da Ensure terminal gets released even in case of an exception 11 years ago
Marcin Kulik 0a8cc6ff8a One more attempt to fix the memory leak 11 years ago
Marcin Kulik 4767442875 Make Snapshot#crop return the snapshot of exact requested height 11 years ago
Marcin Kulik 7c9a9842af Adjust color of the play prompt triangle to match color thumbnails better 11 years ago
Marcin Kulik ade244e5d0 Fix rendering of snapshot in the player 11 years ago
Marcin Kulik 62be399455 Refactor player styles and use them for snapshots 11 years ago
Marcin Kulik 5ecf209a53 Add some TODO comments 11 years ago
Marcin Kulik 7d5a544650 Generate thumbnails from JSON snapshot via Snapshot/SnaphotPresenter 11 years ago
Marcin Kulik ddf0e57b39 Update SnapshotWorker to generate colorful snapshots 11 years ago
Marcin Kulik c8d574b243 Serialize asciicast snapshot just as JSON 11 years ago
Marcin Kulik 59e31baa1b Process incoming asciicast with AsciicastCreator 11 years ago
Marcin Kulik 86a4662fe5 Abstract stdout_data and stdout_timing as a single value object 11 years ago
Marcin Kulik caa6c52759 Rename stdout to stdout_data, stdin to stdin_data 11 years ago
Marcin Kulik 55fe325ec4 Add Bzip2Uploader for uploading, retrieving and decompressing bzip2 files 11 years ago
Marcin Kulik 1aefeb4d6b Introduce BaseUploader with common store_dir for all uploaders 11 years ago
Marcin Kulik 56a2bb2378 Fix Snapshot#crop to not burn when height > line count 11 years ago
Marcin Kulik d93ac84c21 Refactor AsciicastDecorator#thumbnail to render colorful thumbnail 11 years ago
Marcin Kulik 86f728364c Add Brush model 11 years ago
Marcin Kulik e947524533 Add a simple model representing a terminal snapshot 11 years ago
Marcin Kulik 8daf2d0f7f Serialize Snapshot with Snapshot::Serializer 11 years ago
Marcin Kulik a10a447c53 Make the snapshots the hashes 11 years ago
Marcin Kulik 49df9e9082 Make SnapshotWorker a Sidekiq based worker 11 years ago
Marcin Kulik 5087533126 Do the snapshotting in the service object 11 years ago
Marcin Kulik e85104179e Fix unbzipping of stdout files 11 years ago
Marcin Kulik a81d9dadb3 Use tsm gem for snapshot generation 11 years ago
Marcin Kulik 4e1f01dc99 Add logging to SnapshotWorker 11 years ago
Marcin Kulik 2d6b60e027 Fix AsciicastDecorator#embed_script 11 years ago
Marcin Kulik df6bed3541 Merge branch 'master' into embed 11 years ago
Marcin Kulik 8a52605266 Add spec for AsciicastDecorator#embed_script 11 years ago
Marcin Kulik 013eade63c Count view only once in the same browser 11 years ago
Marcin Kulik feec862f99 Display embed link on the asciicast's page 11 years ago
Marcin Kulik 20cf58e89b Make the render expose its width and height 11 years ago
Marcin Kulik f0b66b6399 Center overlays according to viewport/container width 11 years ago
Marcin Kulik e182cce8ee Don't use document.write to insert the player into the DOM 11 years ago
Marcin Kulik f22837f4e9 Add "embed" css/js bundles 11 years ago
Marcin Kulik d1dcd08861 Initial version of iframe-based embedding 11 years ago
Marcin Kulik 7a3bc80340 Prevent progress bar to span more than 1 line 11 years ago
Marcin Kulik 22ae493513 Fix terminal's line-height even more! 11 years ago
Marcin Kulik 1e57bee513 Fix terminal line's line-height 11 years ago
Marcin Kulik 49be5d6fe2 Convert layout to slim 11 years ago
Marcin Kulik 597eb5174b Use old-sass syntax for stylesheets 12 years ago
Marcin Kulik 127f68a778 Fix Api::CommentsController#index 12 years ago
Marcin Kulik 87128c0873 Remove commented out code 12 years ago
Marcin Kulik 078b04e3a1 Fix asciicast page when its author has other asciicasts 12 years ago
Marcin Kulik 4c5c0c7d0e Fix logging in after draper upgrade 12 years ago
Marcin Kulik 7659fe722e Fix UsersController#show 12 years ago
Marcin Kulik a6bbdf7a39 Load homepage asciicast in before_filter 12 years ago
Marcin Kulik 3e2bc439a0 Make sure docs pages are fine 12 years ago
Marcin Kulik 62a3ffed92 Don't check for webkit anymore when enabling WebWorker player 12 years ago
Marcin Kulik f5a91c680b Fix draper vs kaminari issue 12 years ago
Marcin Kulik 5f53c66639 Update decorators to use new Draper API 12 years ago
Marcin Kulik 95a0e44798 Use http url for avatar in footer 12 years ago
Mike Fiedler fee3e947bd Fixed upgrade command
`brew update foo` => This command updates brew itself, and does not take formula names.

Hence: `brew upgrade asciiio` => Error: asciiio-HEAD already installed
12 years ago
Marcin Kulik 2e8fc48473 Set MAX_DELAY constant on model, not decorator 12 years ago
Marcin Kulik 9977e69ace Fix ensure_owner 12 years ago
Marcin Kulik 50f84295af More space between asciicast description and thumbnails 12 years ago
Marcin Kulik b284781620 Cover all scenatios in asciicasts controller specs 12 years ago
Marcin Kulik 11bab12afb Extract AsciicastJSONDecorator from AsciicastDecorator 12 years ago
Marcin Kulik 9ac2c49180 Custom scopes for paginated lists 12 years ago
Marcin Kulik 1e07fafb2e When terminal_type is empty also return '?' 12 years ago
Marcin Kulik 816e09703a Cleanup author/profile links 12 years ago
Marcin Kulik 3b2dc7f998 Simplify author_profile_link 12 years ago
Marcin Kulik 780dff5db1 Decorate users in UserMailer 12 years ago
Marcin Kulik a1fad7ccb7 Decorate User#nickname 12 years ago
Marcin Kulik 80619928a8 Decorate current_user 12 years ago
Marcin Kulik 3f53f2ad50 Use decorates_association instead of custom method 12 years ago
Marcin Kulik c1e576e5dd "Other asciicasts by this user" 12 years ago
Marcin Kulik af95da5fe8 Pass asciicasts to 'previews' partial explicitly 12 years ago
Marcin Kulik cd16719be6 It's asciicast, not preview 12 years ago
Marcin Kulik 2c006d5fdf Improve AsciicastDecorator#description 12 years ago
Marcin Kulik 0e2f78af1d Split asciicasts#show into more partials 12 years ago
Marcin Kulik ce6a47e815 Fix :location for unsaved records 12 years ago
Marcin Kulik 42f8ea63de Mark snapshot as safe HTML 12 years ago
Marcin Kulik 09a9d86254 Fix play button position in thumbnails 12 years ago
Marcin Kulik ea3cfbb65a Limit function calls number between AnsiInterpreter and VT 12 years ago
Marcin Kulik 70b1f27234 "Reverse video" support 12 years ago
Marcin Kulik 51fc7a0db1 Fix typo 12 years ago
Marcin Kulik f86409500c More semantic name for insertCharacters 12 years ago
Marcin Kulik d95da9635a Update AnsiInterpreter specs to handle new implementation 12 years ago
Marcin Kulik 42897a3d47 Satisfy Brush specs 12 years ago
Marcin Kulik d5831f163d Use eraseScreen instead of clearScreen 12 years ago
Marcin Kulik f3775cdf3a "Plural, not singular" 12 years ago
Marcin Kulik 7e3120a4dd No () 12 years ago
Marcin Kulik dc90d24f4f Remove comment 12 years ago
Marcin Kulik 3ddf5e5dce Don't rely on underscore too much 12 years ago
Marcin Kulik 0b01d98db2 Bring back brush caching 12 years ago
Marcin Kulik cce80b07ca Fix brush creation in canvas renderer 12 years ago
Marcin Kulik b87649aec2 Bring back color support 12 years ago
Marcin Kulik 1185e3a4d9 Buffer non-processed data in VT instead of AnsiInterpreter 12 years ago
Marcin Kulik 7b1be025d6 Simplify handlePrivateEscSeq 12 years ago
Marcin Kulik 9e61d3d179 Extract AnsiInterpreter from VT 12 years ago
Justin Hileman bc052af53a Add a letter :) 12 years ago
Marcin Kulik ec05e8eaa8 Asciicast preview styles don't belong to base 12 years ago
Marcin Kulik 05909ae22b Margin for player should be set in base.css 12 years ago
Marcin Kulik 646ca6858a AsciicastDecorator#user 12 years ago
Marcin Kulik 1754656578 Raw page with player only 12 years ago
Marcin Kulik 49644ffc68 Validate presence of a model, not id 12 years ago
Marcin Kulik a344670d50 Clean up condition 12 years ago
Marcin Kulik 33025e00f7 AsciicastDecorator#terminal_type 12 years ago
Marcin Kulik d86174d147 link_to_delete_asciicast helper 12 years ago
Marcin Kulik fdf2a0c326 indented -> indented_text 12 years ago
Marcin Kulik c94b6ff2d7 timeago -> time_ago_tag 12 years ago
Marcin Kulik d9d85c11e0 category_link -> link_to_category 12 years ago
Marcin Kulik 44e23bf003 Just decorate. 12 years ago
Marcin Kulik 560ab8362a Introduce proper player helper with proper template 12 years ago
Marcin Kulik 4fba36778e player_script -> player_script_tag 12 years ago
Marcin Kulik 4f06a81ad1 Of course snapshot_queue, not comment_queue 12 years ago
Marcin Kulik d72b5852e0 Move carrierwave storage config to initializer 12 years ago
Marcin Kulik 1fc49727b2 More meaningfull name for overpass font css file 12 years ago
Marcin Kulik dbcbe42613 Move vendor CSS to vendor/assets 12 years ago
Marcin Kulik 12c500b57d Move vendor JS to vendor/assets 12 years ago
Marcin Kulik db4c4a397c Return 'unknown' as os when uname is empty 12 years ago
Marcin Kulik d0aea034f7 Change URL to recorder script on About page 12 years ago
Marcin Kulik 2f2c30ea0f Make the font of pre element a little smaller 12 years ago
Marcin Kulik c3d45ba441 Tell about edit/delete of asciicast in online docs 12 years ago
Marcin Kulik 0ff6721530 Update online docs 12 years ago
Marcin Kulik 772aa32f0e Remove obsolete comment view and template 12 years ago
Marcin Kulik 58b619a7cf handlebars_assets is not used anymore 12 years ago
Marcin Kulik 07e6c6d8a1 Fix link to sickill's profile (closes #15) 12 years ago
Marcin Kulik 1410fd390f Update bzip2.js to latest version by @gbarco 12 years ago
Marcin Kulik 8f51defdaa Reformat long string 12 years ago
Marcin Kulik c172df390e Remove old helper for created_at 12 years ago
Marcin Kulik afa03974a2 Calculate relative time in JS (b/c of caching) 12 years ago
Marcin Kulik 4eae9aa664 Check for window.Worker when choosing Player class 12 years ago
Marcin Kulik d4da1b2202 Revert "Handle both bzipped and non-bzipped data in DataUnpacker"
This reverts commit 05d3970e39.
12 years ago
Marcin Kulik 62236504cf Revert "Handle non-bzipped data also in AsciicastDecorator"
This reverts commit 9d08c17087.
12 years ago
Marcin Kulik cbce088f05 Revert "Call the callback, really"
This reverts commit fe3af22bf2.
12 years ago
Marcin Kulik 83c3b12ee0 Turn off airbrake_javascript_notifier 12 years ago
Marcin Kulik fe3af22bf2 Call the callback, really 12 years ago
Marcin Kulik 9d08c17087 Handle non-bzipped data also in AsciicastDecorator 12 years ago
Marcin Kulik 05d3970e39 Handle both bzipped and non-bzipped data in DataUnpacker 12 years ago
Marcin Kulik 5812b10709 Cache static pages 12 years ago
Marcin Kulik ddd0cd9f74 HTTP caching for asciicast json data 12 years ago
Marcin Kulik 75961f3f22 Scopes 12 years ago
Marcin Kulik 44edbe08d1 Cache whole previews list fragments 12 years ago
Marcin Kulik 6c007cdd9c Not ready yet for cache_key on ActiveRecord::Relation 12 years ago
Marcin Kulik 7d6ac6ddc9 Include all the things!! 12 years ago
Marcin Kulik 0de8aa76ea Use fragment caching for thumbnails 12 years ago
Marcin Kulik 877e1d9be9 Render partial with collection for previews 12 years ago
Marcin Kulik b1567e75f2 Fix cellHeight calculation 12 years ago
Marcin Kulik 6fcef6e448 Rename var 12 years ago
Marcin Kulik 5c395fccb6 Set title for homepage 12 years ago
Marcin Kulik e41681bcd8 Require colors for canvas renderer 12 years ago
Marcin Kulik 8ae889e477 Enable new worker-based player for webkit browsers 12 years ago
Marcin Kulik 4b26edfd49 Support for both new worker-based player and old one 12 years ago
Marcin Kulik 1672176335 Refactor PlayerView and introduce Player 12 years ago
Marcin Kulik 1f260e95aa DataUnpacker with fallback 12 years ago
Marcin Kulik 87f42d7874 Don't pass cursor blinking through VT 12 years ago
Marcin Kulik a429248cc3 We don't need no stinkin' play-button image 12 years ago
Marcin Kulik 84f2b9a5c6 Use requestAnimationFrame shim by Paul Irish 12 years ago
Marcin Kulik c55b77488d Use screenfull.js for fullscreen support 12 years ago
Marcin Kulik 2c02297792 Newer es5-shim 12 years ago
Marcin Kulik 8df492b2b4 Cleanup in assets 12 years ago
Marcin Kulik 510960dd00 requestAnimationFrame shim 12 years ago
Marcin Kulik 3b11713903 Render in webkitRequestAnimationFrame callback 12 years ago
Marcin Kulik d99cd115fc Improved naming 12 years ago
Marcin Kulik 8b7f733606 Wrap WebWorker with AsciiIo.Worker 12 years ago
Marcin Kulik 9d15c931b4 Directory structure reorganization 12 years ago
Marcin Kulik 2383d50d1c Move common css props to mixin 12 years ago
Marcin Kulik 1fd37f0e62 Add 'playing' / 'paused' class to player element 12 years ago
Marcin Kulik 8c68dbf574 Remove old commented code 12 years ago
Marcin Kulik cf55c2db87 Create worker earlier 12 years ago
Marcin Kulik 908ee1fb25 Improve rendering speed on high volume stdout 12 years ago
Marcin Kulik 8506e60b3f Include helper in worker bundle 12 years ago
Marcin Kulik 59567921db Working Web Worker version :) 12 years ago
Marcin Kulik 668f382a69 Fix specs 12 years ago
Marcin Kulik a02fdd7777 Fix 0-based SGR codes parsing 12 years ago
Marcin Kulik 095e262988 Fix record link on ~user page 12 years ago
Marcin Kulik 87ee87f4b7 Improve error message display 12 years ago
Marcin Kulik b1ecbc16c0 Option to disable HUD 12 years ago
Marcin Kulik 4edd5ead9e Play cast on homepage at 2x speed 12 years ago
Marcin Kulik 10f3000860 Put "About" into footer 12 years ago
Marcin Kulik 264b296e0b /connect improvements 12 years ago
Marcin Kulik 06da0da8cb Nicely looking auth buttons 12 years ago
Marcin Kulik 3274bdf7d5 Use h1 header on error page 12 years ago
Marcin Kulik db8319e2b8 Fix typo on homepage 12 years ago
Marcin Kulik fcb95df6c3 Remove obsolete view 12 years ago
Marcin Kulik 657ddab1de Improve situation with markdown parsing 12 years ago
Marcin Kulik 333e063161 Pimp My Docs 12 years ago
Marcin Kulik da53e64585 Get id of asciicast displayed on homepage from CFG 12 years ago
Marcin Kulik 785273707b Proper design, finally! 12 years ago
Marcin Kulik f3b6acf00a Move benchmarking code to player view 12 years ago
Marcin Kulik 789aa3a230 Less frequent time reporter 12 years ago
Marcin Kulik dd3341921d SRP for Movie 12 years ago
Marcin Kulik e001676f21 Normalized event naming 12 years ago
Marcin Kulik d581d4ede1 No prefix for HudView events 12 years ago
Marcin Kulik a58efccd6c No parenthesis 12 years ago
Marcin Kulik f092ad87d2 Decouple all the things 12 years ago
Marcin Kulik 58d5ce3fa5 Fix handling of incomplete OSC codes 12 years ago
Marcin Kulik cdbdb73c14 Make loading/play-prompt overlays semi-transparent 12 years ago
Marcin Kulik 02960a0cdc Properly indent whole multiline comment in email notification 12 years ago
Marcin Kulik a57d05597e Don't crash on comment for asciicast without user 12 years ago
Marcin Kulik adf2b30d8a Make pg happy 12 years ago
Marcin Kulik af44b0c0d1 Get rid of twitter-bootstrap-rails, yay! 12 years ago
Marcin Kulik 38faf7e437 Use heroku style config (based on ENV) 12 years ago
Marcin Kulik 50428b9c66 Unicorn with girl_friday on Heroku 12 years ago
Marcin Kulik 3ac8693358 Merge branch 'rubinius18'
* rubinius18:
  Add puma to bundle
  Make it work on rubinius in 1.8 mode
  Use draper from git
  Don't use twitter bootstrap js bundle
  Update gem dependencies to work on rubinius

Conflicts:
	Gemfile
	Gemfile.lock
12 years ago
Marcin Kulik 69817d16f9 Multi-interpreter, part 1 12 years ago
Marcin Kulik 95cbc4a52f Merge branch 'master' into rubinius18
* master:
  Allow running in production mode on dev machine
  Fix UserMailer to work in 1.8 mode

Conflicts:
	app/views/layouts/application.html.erb
13 years ago
Marcin Kulik 6b53a25f0a Allow running in production mode on dev machine 13 years ago
Marcin Kulik 4b707884ab Fix UserMailer to work in 1.8 mode 13 years ago
Marcin Kulik 72526f3e1d Merge branch 'master' into rubinius
* master:
  Handle wider range of printable unicode characters
13 years ago
Marcin Kulik ea11733882 Handle wider range of printable unicode characters 13 years ago
Marcin Kulik 056074ef04 Make it work on rubinius in 1.8 mode 13 years ago
Marcin Kulik e4a46fe45d Don't use twitter bootstrap js bundle 13 years ago
Marcin Kulik 31b82ad512 Use girl_friday for bg jobs 13 years ago
Marcin Kulik 00d2a6fcc6 Shell out to bzip2 instead of using bzip2-ruby 13 years ago
Marcin Kulik 7b33c31c70 Display snapshot for not started movie 13 years ago
Marcin Kulik 45d6683cd5 Line height in pixels is more stable 13 years ago
Marcin Kulik 458ca6e78b Use height + vertical margin instead of outerHeight for cellHeight 13 years ago
Marcin Kulik bd96a8d722 A little smaller line height should be better though 13 years ago
Marcin Kulik e67ec07562 Larger line-height 13 years ago
Marcin Kulik 6b39eac33f Fix word wrap for terminal pre element 13 years ago
Marcin Kulik 4bb69abdc7 Set proper player width in base renderer 13 years ago
Marcin Kulik 0e9287ea85 Improved setting of player width (fixes hud size) 13 years ago
Marcin Kulik 2814f92074 Fix escaping of HTML entities like &, < and > 13 years ago
Marcin Kulik d57f264f17 Properly set player width
Conflicts:

	app/assets/javascripts/player/renderers/pre.js.coffee
13 years ago
Marcin Kulik 49b7c39aac Handle aixterm color codes (90-97, 100-107) 13 years ago
Marcin Kulik ba97246db8 Time compression 13 years ago
Marcin Kulik 5afa98bb11 Better handling of 404s 13 years ago
Marcin Kulik b84b5489c0 Make SnapshotWorker#cleanup not crash 13 years ago
Marcin Kulik fc8677114d Again, better handling of UTF8 printing 13 years ago
Marcin Kulik 3c86965427 Improve regex for catching printable characters 13 years ago
Marcin Kulik 0d77b843d3 adjustFrameWaitTime in Movie#stop 13 years ago
Marcin Kulik 07eeb1e81b Don't start TimeReporter once again when restarting movie 13 years ago
Marcin Kulik a78678407f Reset terminal when restarting movie 13 years ago
Marcin Kulik 6626f6cefc Updated comment 13 years ago
Marcin Kulik 6b8d45f2b8 Refactor movie loading 13 years ago
Marcin Kulik 4252386501 Separate method for preparing self view in PlayerView 13 years ago
Marcin Kulik 1ccaa5ca31 Structure for PlayerView constructor 13 years ago
Marcin Kulik 5159029aff Don't involve PlayerView in cursor blinking stuff 13 years ago
Marcin Kulik bbdb9b15e5 Whitespace 13 years ago
Marcin Kulik 643926ade3 Same for adding "not-started" class 13 years ago
Marcin Kulik 736c3c87dc showLoadingIndicator directly in constructor 13 years ago
Marcin Kulik 097a3653dd Remove "not-started" class from element when movie "really" starts 13 years ago
Marcin Kulik b15804ef0c PlayerView#createChildViews -> #appendChildViews 13 years ago
Marcin Kulik a8136ee18d Create HudView instance directly in constructor 13 years ago
Marcin Kulik 005400a7ce PlayerView doesn't need VT 13 years ago
Marcin Kulik 9a3d4c20dc No need to pass movie-frame through PlayerView 13 years ago
Marcin Kulik d2da307936 No need for setProgress(100) after movie finished 13 years ago
Marcin Kulik 6b8a80c823 Merge branch 'seeking'
* seeking:
  Progress arrow with proper length
  Hacky version of "seeking"
  Seeking prototype
13 years ago
Marcin Kulik 6b2abebbf6 Progress arrow with proper length 13 years ago
Marcin Kulik 46e14dcbae Hacky version of "seeking" 13 years ago
Marcin Kulik a6664dc97f Add fallback base64 codec for crippled browsers 13 years ago
Marcin Kulik 6fda6e4913 WebWorker via Sprockets 13 years ago
Marcin Kulik ccf5576ed9 Seeking prototype 13 years ago
Marcin Kulik 7687449273 Largely improved pausing 13 years ago
Marcin Kulik 17dd692989 Use Math.floor instead of toFixed 13 years ago
Marcin Kulik 4d1afcf01a Use Base64 for encoding asciicast data during transfer 13 years ago
Marcin Kulik cbc845a2ef Revert "Decompress stdout data on server side"
This reverts commit dda0d56fb7.
13 years ago
Marcin Kulik dda0d56fb7 Decompress stdout data on server side 13 years ago
Marcin Kulik dc626d5cf2 Better From header in UserMailer 13 years ago
Marcin Kulik 3a7f462b13 Send email to asciicast author when someone comments 13 years ago
Marcin Kulik 0bb3e75fb6 No need for instance variables in CommentsController#create 13 years ago
Marcin Kulik 4138deffd6 Process up to 100 frames without a break 13 years ago
Marcin Kulik 8398750aab Specs for StaticPagesController 13 years ago
Marcin Kulik 648cf1140b Move all 404 handling to application_controller 13 years ago
Marcin Kulik e5ea6488fd Move asciicast presentation to its decorator 13 years ago
Marcin Kulik 9ddd44abb5 Move comment specs as comment decorator specs 13 years ago
Marcin Kulik 0a09204525 Consistent "time ago" display for asciicasts and comments 13 years ago
Marcin Kulik 32b2cbed35 Move "created" and "as_json" from Comment to CommentDecorator 13 years ago
Marcin Kulik 149e687f38 Bring back missing user->comments assoc 13 years ago
Marcin Kulik c4b5b16e6f Merge branch 'likes'
* likes:
  Data model for "Like"

Conflicts:
	app/models/user.rb
	db/schema.rb
13 years ago
Marcin Kulik 45dd308186 Display comments count 13 years ago
Marcin Kulik f4856407c1 Comment#destroy instead of #delete 13 years ago
Marcin Kulik dccca52c26 Update specs 13 years ago
Marcin Kulik 4a6186f523 Account settings 13 years ago
Marcin Kulik 4daedc7235 Fix handling of OSC seq terminated by ESC\ 13 years ago
Marcin Kulik 4bf95a1383 Fix handling of DCS sequences 13 years ago
Marcin Kulik 98d80ae1fd More specs for home controller 13 years ago
Shannen Saez 202c87178f Removed favicon links because they don't exist. 13 years ago
Marcin Kulik 6334dfde06 Get rid of jquery-linkify.js 13 years ago
Marcin Kulik 2a71c08e5f Show info about github flavored md under comment box 13 years ago
Marcin Kulik 936dac6baa Markdown in comments 13 years ago
Marcin Kulik 06fcbf65c4 Clean up comments_index 13 years ago
Marcin Kulik 7d762b045d Use decorator also for user's asciicasts collection 13 years ago
Marcin Kulik b6473b8554 user->comments association 13 years ago
Marcin Kulik 4cc0cb31a6 Use decorator for asciicast on homepage 13 years ago
Marcin Kulik e84f1eb349 Don't need recent casts any more on homepage 13 years ago
Marcin Kulik 4ff8ab30f8 Example thumbnail view 13 years ago
Marcin Kulik af43a2177e Allow for specifying thumbnail size 13 years ago
Marcin Kulik 7c635ed7db Don't crash when no snapshot available 13 years ago
Marcin Kulik 49c0d9f324 Move presentation to decorator 13 years ago
Marcin Kulik 70a44f5ba3 Fix fetching cast data via ajax 13 years ago
Marcin Kulik 27219f48b7 Thumbnail generation in Sidekiq worker 13 years ago
Marcin Kulik da7a9532df Sidekiq for background jobs 13 years ago
Marcin Kulik da3ec8aca1 Prototype of thumbnail generation 13 years ago
Marcin Kulik 0cbd732980 Data model for "Like" 13 years ago
Marcin Kulik bd85ecda47 Add console-shim for crippled browsers 13 years ago
Marcin Kulik e26dd20385 Improved scroll region handling 13 years ago
Marcin Kulik 778f2281c8 Handle incorrect values when setting cursor position 13 years ago
Marcin Kulik 9e9e3f2662 Use block helper for markdown blocks 13 years ago
Marcin Kulik 8b504d8fea Use asciicast title in page title 13 years ago
Marcin Kulik 1e2e8bfcc3 Display some environment info 13 years ago
Marcin Kulik 5cccd7c24b Hyperlink URLs in title and description 13 years ago
Marcin Kulik dd6eeb36ee Merge pull request #62 from sickill/webworker
Use Web Worker for bz2 decoding
13 years ago
Marcin Kulik 1409c58cff Fix Brush#fgColor/bgColor (fixes text color in canvas renderer) 13 years ago
Marcin Kulik cddfa61dae Autofocus correct field when editing asciicast 13 years ago
Marcin Kulik 8a9fc6fa89 Editing of title/description 13 years ago
Marcin Kulik e28aa23e68 Edit title/desc links 13 years ago
Marcin Kulik 2039022f1c Reformat erb 13 years ago
Marcin Kulik ebcd3d43a6 Ability to delete your asciicast 13 years ago
Marcin Kulik d7ebfac783 Reformat js 13 years ago
Marcin Kulik b56d57c14d Display ~username on asciicasts list 13 years ago
Marcin Kulik 69576f1a0d Display ~username from asciicast if no profile assigned 13 years ago
Micha Wrobel eb9251327f Use Web Worker for bz2 decoding if possible 13 years ago
Marcin Kulik ef86decdc0 More info in "What?" section 13 years ago
Marcin Kulik 88724d0e31 Useful links in heading 13 years ago
Marcin Kulik 5314d6baa5 Use color 0 as default fg color 13 years ago
Marcin Kulik 87b8f93e48 New, "old-school" hud 13 years ago
Marcin Kulik e2eb708d06 Allow selecting (and copying) text in terminal view 13 years ago
Marcin Kulik 0aba1ba99a Prefer github login over twitter 13 years ago
Marcin Kulik 6c73f63037 Wrap featured asciicast in dedicated div 13 years ago
Marcin Kulik c85204bf6a Remove random descriptions 13 years ago
Marcin Kulik 6b6d7a0c0c Mention ~sickill profile in "Use it" 13 years ago
Marcin Kulik e192f1d8cc Homepage improvements 13 years ago
Marcin Kulik 1d9bded8ef Move player overlays one level up 13 years ago
Marcin Kulik 8f23d94eaa Remove logging 13 years ago
Marcin Kulik ade4219458 Proper cursor blinking in canvas renderer 13 years ago
Marcin Kulik 38a68daa0f Greatly improved cancas renderer 13 years ago
Marcin Kulik 850944cece Fix cursor display in "pre" renderer 13 years ago
Marcin Kulik 1b2897573e Merge branch 'bm'
* bm:
  speed and benchmark options for movie
13 years ago
Marcin Kulik 1b49dceab9 speed and benchmark options for movie 13 years ago
Marcin Kulik 282511b60e Move changed fragments detection to ScreenBuffer 13 years ago
Marcin Kulik 1e4864e51e Use proper textBaseline in canvas renderer 13 years ago
Marcin Kulik 501c989c8a Experimental canvas renderer 13 years ago
Marcin Kulik b7d9547cdf Fix setting of scroll region 13 years ago
Marcin Kulik ca38cc20e7 Bind to events after movie is loaded 13 years ago
Marcin Kulik 7f019e6918 es5-shim for crippled browsers 13 years ago
Marcin Kulik 2369dd38c6 Improved header on ~profile page 13 years ago
Marcin Kulik fddd33b37d Italicize proper thing 13 years ago
Marcin Kulik 2bf3030755 Improved look of asciicast previews 13 years ago
Marcin Kulik 5ef241afff More info in preview 13 years ago
Marcin Kulik 78488de405 Browse page header 13 years ago
Marcin Kulik 545adb3721 Only 5 recent on homepage 13 years ago
Marcin Kulik cb0a605bfe Homepage improvements 13 years ago
Marcin Kulik b68e02212d Featured asciicasts 13 years ago
Marcin Kulik 305b948576 Updated installation instructions 13 years ago
Marcin Kulik 4b6ed33158 Description field for Asciicast 13 years ago
Marcin Kulik 0ea7e6dbb0 Process descriptions with markdown 13 years ago
Marcin Kulik 60d32ca2d3 Use goToNextRowFirstColumn instead of manually changing cursor pos 13 years ago
Marcin Kulik ba5acf4012 Update all changed lines in ScreenBuffer#print 13 years ago
Marcin Kulik 66b153c2d2 Installation instruction 13 years ago
Marcin Kulik 3c9d6a8062 Fix Movie#isPaused 13 years ago
Marcin Kulik 306c1619ab Pr0 play button 13 years ago
Marcin Kulik 71f8fed196 Fix line length 13 years ago
Marcin Kulik 61b3890a3d Merge remote-tracking branch 'origin/unique-nickname'
* origin/unique-nickname:
  Keep sensitive signup data in session
  Add users factory back
  rm users factories
  Add view spec for users#new
  Add specs to user#create
  Validate nickname uniquness

Conflicts:
	Gemfile
	Gemfile.lock
13 years ago
Marcin Kulik 81b06178fd Display asciicast example on homepage 13 years ago
Marcin Kulik 97fe0cb3ff Move player to partial 13 years ago
Marcin Kulik 085a678479 overflow: hidden for terminal element 13 years ago
Micha Wrobel d6273d4259 Keep sensitive signup data in session 13 years ago
Marcin Kulik 029631df6d Random description for asciicast 13 years ago
Marcin Kulik 6b8a9e8610 Profile links with tilde 13 years ago
Marcin Kulik 2e678714d4 Get brush with #getBrush 13 years ago
Marcin Kulik 6037903f1c Use twitter bootstrap 13 years ago
Marcin Kulik 3f798ab7aa Check code style with cane and tailor 13 years ago
Micha Wrobel 6b40d9dbc8 Add specs to user#create 13 years ago
Micha Wrobel fc53b71ee2 Validate nickname uniquness 13 years ago
Marcin Kulik a4014b2012 attr_accessible list for Asciicast (closes #50) 13 years ago
Marcin Kulik 119622f57b Remove TODO comment 13 years ago
Marcin Kulik 9e0a6acf55 Spec for #redirect_back_or_to 13 years ago
Marcin Kulik deaf42edad ApplicationController#redirect_back_or_to 13 years ago
Marcin Kulik 8216781067 Use store_location in Unauthorized handler 13 years ago
Marcin Kulik a0041abed1 store_location / get_stored_location 13 years ago
Marcin Kulik 80df89ec84 Fix typo 13 years ago
Marcin Kulik 98d5285a23 Require auth in UserTokensController (closes #53) 13 years ago
Marcin Kulik 16d11a1249 Redirect to profile page after claiming (closes #51) 13 years ago
Marcin Kulik c976c567d7 Loading indicator 13 years ago
Marcin Kulik 830c39d2fb Fix path for asciicasts json data 13 years ago
Marcin Kulik f914a97308 Airbrake/Errbit 13 years ago
Marcin Kulik c3326e4b16 Browse path 13 years ago
Marcin Kulik 6660efe8a7 collection is not needed in CommentEntry view 13 years ago
Marcin Kulik 51dfa8474f Profile paths: ~sickill 13 years ago
Marcin Kulik 35af4cf9e7 Home and installation pages 13 years ago
Marcin Kulik 44d6914991 :dependent => :destroy for Asciicast#comments 13 years ago
Marcin Kulik ad9542d124 Store files in tmp in specs 13 years ago
Marcin Kulik ebf0383e99 Fix comment routes 13 years ago
Marcin Kulik c4f40322ed Merge branch 'master' into comments
* master:
  Display asciicast author and creation time
  Claiming asciicasts
  User#add_user_token
  Asciicast.assign_user
  User tokens for assigning asciicasts to users
  Better styles + pagination

Conflicts:
	app/models/asciicast.rb
	db/schema.rb
	spec/factories/asciicasts.rb
	spec/factories/users.rb
13 years ago
Marcin Kulik 66db199aab Display asciicast author and creation time 13 years ago
Marcin Kulik 9e59b19c16 Claiming asciicasts 13 years ago
Marcin Kulik 0de5784e68 User#add_user_token 13 years ago
Marcin Kulik 9f51211bc1 Asciicast.assign_user 13 years ago
Marcin Kulik 1ba9067551 User tokens for assigning asciicasts to users 13 years ago
Micha Wrobel 5ad02c8610 Remove wrong route 13 years ago
Micha Wrobel a2d1b1a15f Simplify comments_index.js 13 years ago
Micha Wrobel ea62987c06 Fix typo 13 years ago
Micha Wrobel 5d52be2bae Add Forbiden Exception and refactor existing actions 13 years ago
Marcin Kulik b7807c3f0d Better styles + pagination 13 years ago
Micha Wrobel 4f47f0a7fc Add specs for destroy 13 years ago
Micha Wrobel e7567848d3 Url is defined after initialization 13 years ago
Micha Wrobel 712410a3e7 Remove not used leavings 13 years ago
Micha Wrobel 706460e71b Show time ago in comments 13 years ago
Micha Wrobel e7f5f57424 Some refactoring, and make possible to remove own comments 13 years ago
Micha Wrobel 9a190cf474 Don't show comment form if user not logged in 13 years ago
Micha Wrobel d296d69aa3 Add information about current_user 13 years ago
Micha Wrobel 5201b3f768 Initial implementation of comments - in progress 13 years ago
Micha Wrobel 9094b8b0b6 Override as_json to include more data 13 years ago
Micha Wrobel e66ad8b5ed Add comments association 13 years ago
Micha Wrobel 877a59b365 Protect from mass assignment 13 years ago
Micha Wrobel cc6fd9eb2a Remove posibility to update comment 13 years ago
Micha Wrobel 70cf1bdc3b Add comment resource 13 years ago
Marcin Kulik 58092ae50e Let's have separate page for login buttons
This way we can link to login page from comments section
if user is not authenticated
13 years ago
Marcin Kulik 285f9934ab Google analytics 13 years ago
Marcin Kulik f3c80398cb Clicking on term view toggles playback 13 years ago
Marcin Kulik 755efc09d1 Format time as mm:ss 13 years ago
Marcin Kulik aa3c28701d Pausing + time display 13 years ago
Marcin Kulik 5e05b0d1cb Fix carriageReturn use 13 years ago
Marcin Kulik 1062aa3d01 Decompress bzip data in the browser 13 years ago
Marcin Kulik b3e8fbb7df Load asciicast data via ajax 13 years ago
Marcin Kulik a16c10009a Initially set brush with setBrush 13 years ago
Marcin Kulik dec4d3dc31 Handle more standard esc sequences 13 years ago
Marcin Kulik 5a54654dc5 Handle special charset setting 13 years ago
Marcin Kulik 22b4da210c Charsets support 13 years ago
Marcin Kulik 9480d9c1bb Improve top nav 13 years ago
Marcin Kulik 9263bc37d3 avatar_img helper 13 years ago
Marcin Kulik ece7bfa909 Fix ApplicationController#current_user 13 years ago
Marcin Kulik 7ffbe50c74 Fix saveTerminalState and restoreTerminalState 13 years ago
Marcin Kulik 76a5c46bfb Fix reverseIndex, verticalTab 13 years ago
Marcin Kulik 8005613c95 Use single parent element for faster innerHTML 13 years ago
Marcin Kulik 2c58e449a5 Even more faster renderLine 13 years ago
Marcin Kulik 8ef0b63029 A little faster renderLine 13 years ago
Marcin Kulik c6d6f9c851 Remove old commented out implementation of parser 13 years ago
Marcin Kulik a9afb35b82 Don't log too much 13 years ago
Marcin Kulik 766fe57bf1 New parser 13 years ago
Marcin Kulik 6eeafdf699 Extract SGR codes interpretation to separate class 13 years ago
Marcin Kulik 3371a238b7 Merge pull request #35 from sickill/omniauth
User model and omniauth authentication
13 years ago
Micha Wrobel d4f127508f Add nickname column to users 13 years ago
Micha Wrobel 2669bbb310 Don't use assigns(:current_user) in spec 13 years ago
Marcin Kulik 0979a6706b VT#renderer -> VT#view 13 years ago
Marcin Kulik d0e0ec4f88 Use :alert (supported directly by redirect_to) instead of :error. 13 years ago
Micha Wrobel c4763bb566 Improve controller specs, tiny refactoring 13 years ago
Micha Wrobel ce67e84a60 Don't raise AR::RecordNotFound if there is no id 13 years ago
Micha Wrobel 0190c3f049 Add avatar_url column, modify migration file 13 years ago
Micha Wrobel be24115519 Extract paths to helper methods 13 years ago
Micha Wrobel 1b33acb937 Make sure that @current_user is also set and cleared 13 years ago
Micha Wrobel bf6b74289b Add omniauth authentication: github and twitter 13 years ago
Micha Wrobel c374f43f5e fix key name, and remove unsupported email 13 years ago
Micha Wrobel f59841abaf Add user model, and .create_with_omniauth method 13 years ago
Marcin Kulik f23cbbb79d Move char attrs back to VT 13 years ago
Marcin Kulik 69c1dcbf9c Another TODO 13 years ago
Marcin Kulik 3eb0b40d32 TODO 13 years ago
Marcin Kulik 9edbcbac4e Remove wrong handlers 13 years ago
Marcin Kulik 260d7c6956 Comment 13 years ago
Marcin Kulik 49c583d500 Rename handleCSI to handleCS 13 years ago
Marcin Kulik b4322fa5a0 Extract responsibilities 13 years ago
Marcin Kulik 961ee90836 Handle reverse/normal video attr 13 years ago
Marcin Kulik 9af87da790 Handle ESC[^ - reserved 13 years ago
Marcin Kulik eecd3b3917 Configuration with confstruct 13 years ago
Marcin Kulik efff8e765d Ignore 2 more esc sequences 13 years ago
Marcin Kulik fe349c9394 Blink attribute support 13 years ago
Marcin Kulik 5fdd43306d Close span only if there was at least one brush used 13 years ago
Marcin Kulik 5f65e4d3fa Set fixed with and height of terminal view. Fixes #22 13 years ago
Marcin Kulik a0482edb14 Fix _cursorRight when on right edge of screen 13 years ago
Marcin Kulik ee6298d515 Italic style support 13 years ago
Marcin Kulik bf115d99be Fix VT#deleteCharacters for good 13 years ago
Marcin Kulik 47998cc1a0 Improved VT#deleteCharacters 13 years ago
Marcin Kulik c3f3da1318 Tab stop support 13 years ago
Marcin Kulik dd737d4134 Fix bright attribute support 13 years ago
Marcin Kulik bbd34c7e7c Escape & and < in span before inserting them into DOM 13 years ago
Marcin Kulik b6ccd8bf88 restartCursorBlink on movie-awake event 13 years ago
Marcin Kulik ee7a051172 Cache generated brush spans 13 years ago
Marcin Kulik df1c1f5a4a Orders of magnitude faster rendering 13 years ago
Marcin Kulik f4848c8b4b Update only changed lines instead of whole screen 13 years ago
Marcin Kulik 6819f75070 Simplify dirty line tracking 13 years ago
Marcin Kulik a9e0e261dc Extract line initialization and removal to separate methods 13 years ago
Marcin Kulik f0c599892e Fix insert/deleteLine 13 years ago
Marcin Kulik 1adb15a533 Scroll region support 13 years ago
Marcin Kulik a194067ab5 Lots of good stuff \m/ 13 years ago
Marcin Kulik 2d4bc140a1 Fix cursorDown/Up 13 years ago
Marcin Kulik d6a0211cb9 VT *is* interpreter + screen buffer as one 13 years ago
Marcin Kulik fd16702938 Render cursor in visible state for update lines 13 years ago
Marcin Kulik 6ecb2e7fdc Improved cursor behavior 13 years ago
Marcin Kulik 9c5201905c Data buffering in VT 13 years ago
Marcin Kulik 4e5240e24f Switched to jasminrice for coffee specs 13 years ago
Marcin Kulik 5d6ba15b19 VT = Ansi interpreter + (embedded) screen buffer 13 years ago
Marcin Kulik a378358abf Improvements to interpreter and screen buffer 13 years ago
Marcin Kulik a591423e3b Moah refactoringz, moah specs 13 years ago
Marcin Kulik ed6d1146da Brush with spec 13 years ago
Marcin Kulik 10ebba7755 Remove empty file 13 years ago
Marcin Kulik 2c4796ed70 All js specs passing 13 years ago
Marcin Kulik 145e66ca18 Refactoring time!! 13 years ago
Marcin Kulik 5ca0a2965d CSI M handler 13 years ago
Marcin Kulik 8f770a28bf Use recommended color cube values for 216 rgb colors / 24 shades of grey 13 years ago
Marcin Kulik 2ea2931eee Unbzip data files before processing 13 years ago
Marcin Kulik e508aadfa1 VPA - Vertical Position Absolute 13 years ago
Marcin Kulik f4bc758936 CHA – Cursor Horizontal Absolute 13 years ago
Marcin Kulik 73221c8d14 NOOP for "Autowrap mode" 13 years ago
Marcin Kulik e1b1bc56da NOOP for "Move to next tab stop" 13 years ago
Marcin Kulik 68703136cb Cleanup after js2coffee 13 years ago
Marcin Kulik 8a5f73e382 Fix Player#logStatus 13 years ago
Marcin Kulik c701989209 Stop animation when can't match 100+ chars 13 years ago
Marcin Kulik 7b143069c8 Simplified AnsiInterpreter#feed 13 years ago
Marcin Kulik 159aee848f Handle SGR 39/49 (reset color/background) 13 years ago
Marcin Kulik c9eca61c05 Simplified AsciiIo.Player 13 years ago
Marcin Kulik 3fd50d500e Don't strip first line of data 13 years ago
Marcin Kulik 00f2ee5a41 Display asciicast title in heading 13 years ago
Marcin Kulik 28b07a88ed Return Location header on successful upload 13 years ago
Marcin Kulik 8ba57d9570 Split Terminal#restartCursorBlink into stop/start 13 years ago
Marcin Kulik 86d9b55eae Check up to 100 bytes until giving up 13 years ago
Marcin Kulik b1e1fd0d90 Simplified regexp for OSC 13 years ago
Marcin Kulik 59dbd5aea3 Api::AsciicastsController 13 years ago
Marcin Kulik 268d4b1660 Asciicast#meta= 13 years ago
Marcin Kulik 330df852b4 Simplify dirty line tracking 13 years ago
Marcin Kulik 0be891e7ea Display time of run on console 13 years ago
Marcin Kulik daa2083d51 Simplified Terminal#cursorForward/cursorBack 13 years ago
Marcin Kulik 291bbdf9c7 Fix CUU and CUD cursor handling 13 years ago
Marcin Kulik 6f3bad7f49 DRY 13 years ago