502 Commits (3d86e9d77eae0a9ff0fe6043f74df9f88d372fcd)

Author SHA1 Message Date
raboid 3aec3ebc28 Conditionally disable PNG export for Safari 6 years ago
Mike Fix 794a50d3f3 fix # issues for SVGs
Closes #640
6 years ago
Mike Fix 7896e96213 show presets by default 6 years ago
Mike Fix 642749a701 use escape-goat 6 years ago
Mike Fix cc45569b6c remove old mounted state from BackgroundSelect 6 years ago
Mike Fix cc593a7968 allow id's in <Button /> 6 years ago
Mike Fix 4d91c5d4c9 add ids back again 6 years ago
Mike Fix 469890df68 add pop id prop to fix integration tests 6 years ago
raboid 9d37f9bf99 use HOC for popout state, remove react-addons-shallow-compare 6 years ago
raboid 64cccc1d90 Move Presets into separate file 6 years ago
raboid fdaa990ab2 Remove title prop from Button 6 years ago
raboid bf26e34f06 Update Editor to use Button 6 years ago
raboid ee6f8ffdc2 Update ListSetting to use util/toggle 6 years ago
raboid e5b3d39d4e Update ExportMenu to use Popout, Button, Input 6 years ago
raboid 0c22633853 Update ImagePicker to use Input 6 years ago
raboid f51ab29cd1 Create Input component 6 years ago
raboid 6da617b553 Update Settings to use Popout & Button 6 years ago
raboid 7a5145135c Update Button component 6 years ago
raboid 583e4ece73 Update BackgroundSelect to use Popout & ColorPicker 6 years ago
raboid e073dec0cd Create ColorPicker component 6 years ago
raboid 36178adc07 Create Popout component 6 years ago
Mike Fix b12c3f802c lint and prettier 6 years ago
Mike Fix 428b4bd400 upgrade CodeMirror 6 years ago
Jake Dexheimer 231bd39169 minor ux fixes 6 years ago
Sean 5206dc4ef1 Reduce updates caused by typing (#604)
* prevent index page from updating

* implement shouldComponentUpdate for ExportMenu

* replace componentDidUpdate with updateState in Editor

* replace shallowCompare with React.memo

* add flex-basis to prevent jank
6 years ago
Jake Dexheimer 0aa1d7404f minor design improvements 6 years ago
Jake Dexheimer 4571b03eb4 clean up menu controls position, about page 6 years ago
Mike Fix b5a1052b40 remove unused utils, move specific utils into component files 6 years ago
Sean Rabaut cd81f056ca Fix menu button alignment in Firefox 6 years ago
Sean 0934186ce9 Fix setting menu movement (#602) 6 years ago
Sean f6f0adee6b Add preset feature (#595)
* Add preset feature without create

* fix lint errors

* Add presets to Editor state

* add remove, update -> apply, omit presets

* replace name with index, add undo functionality

* fix reduce function

* Tweaks:

- Make remove filter setState atomic
- Remove broken sCU in BackgroundSelect
- Touch up style of arrow functions a little
- Remove titleBar from default settings
- Don't expose SETTINGS_KEYS
- Use hasOwnProperty instead of includes()

* refactor preset state into Settings

* move format code into editor and make it work again

* omit custom in applyPreset

* move presets array state into Settings

* keep custom sCU in BackgroundSelect

* pull out inline objects

* revert pages/index

* increase Presets font-size, remove margin-top

* Add ability to create presets

* also enable passing exportSize as prop

* move selectedPreset back into Settings (my bad Sean)

* replace splice with filter, getSavedX -> getX

* Revert "move selectedPreset back into Settings (my bad Sean)"

This reverts commit ae5da4700ea36ad7c31e697e83a2724be4b448f4.

* make sure background updates remove selected preset

* selectedPreset -> preset

* use onChange instead of selectPreset

* use preset id's instead of indexes

* bug fixes

* use disabled instead of pointer-events

* make .settings-presets-applied flex 💪

* make .settings-presets-arrow flex 💪

* move getPresets outside of `setState`

* move inline styles to style tag

* refactor using omitBy and isFunction

* remove lodash.isfunction

* fix applyPreset to disclude preset field

* move omit to getSettingsFromProps

* replace lodash.omit with omitBy solution

* .includes -> .indexOf

* add default preset and presetApplied state

* fix lint error

* remove presetApplied

* add more default presets

* fix default preset functionality

* tweaks

* preserve preset list scrollLeft b/w updates with a hack

* Use ref for preset content

* remove forwardRef
6 years ago
Mike Fix 4a00206526 fix filter regex for encoded characters
Closes #564 (again)
6 years ago
Mike Fix 90a0ead95b move format code into editor and make it work again 6 years ago
Mike Fix dd93b6af9e update export-menu-container 6 years ago
Mike Fix 109a3edc6b export-container -> export-menu-container" 6 years ago
Mike Fix a174c26067 fix another encoding bug...🤞
- Closes #564
6 years ago
Miloš Sutanovac 09397baf7b Adds CLI hooks (IDs) to certain elements (#592)
* Adds CLI hooks (ids) to certain elements

* Update Carbon.js

* Update ExportMenu.js
6 years ago
Jake Dexheimer 479e3b7bbf minor aesthetic tweaks 6 years ago
Sean eb8341b5bc add setting options back (#589)
* add setting options back

* fix height
6 years ago
Sean 070b7f8aaf New settings menu (#588)
* New settings menu

* remove showPresets

* clean

* use React.memo for pure function components
6 years ago
Mike Fix bb36e0062b fix tab characters in SVG
- closes #586
6 years ago
Sean 38665cc34d Dropdown updates (#585)
* Add dropdown icons

* remove cursor pointer from icons
6 years ago
Mike Fix 9b5b96cd58 remove unneeded sCU 6 years ago
Mike Fix 17c8036b34 tweak 6 years ago
Mike Fix 7772108f01 remove button option for dropdown 6 years ago
Sean 02debae7e2 increase button click area (#584) 6 years ago
Mike Fix 8087f0222f show network error in in imagepicker 6 years ago
Michael Fix 5badd2fbbb
remove timestamp (#583)
Clean up
6 years ago
Michael Fix 737cb979ae
implement background url support (#579)
* implement background url support

- Closes #490

* fix lint

* WIP: move input into background picker

* fix cors issue

* keep background select as is

* update UI to select between URL and file

* fetch https url instead of http
6 years ago
Sean 68d90364b0 New export menu (#582)
* New export menu

* Fix lint errors
6 years ago
Sean 32e09c9e25 Increase dropdown border width (#581) 6 years ago
Sean 3248f82298
New checkmark icon (#580) 6 years ago
Michael Fix f4f23541ea
Create dark watermark (#577)
- Closes #575
6 years ago
Mike Fix 3b67c0a846 undo map even if conversion fails 6 years ago
Mike Fix 61ca421789 create Map of changes and undo them
- Closes #564
6 years ago
Mike Fix f184e711c1 fix encoding issue for plain text
- Closes #569
- Opens #564
6 years ago
Michael Fix 246a2f648f
fix(Editor): use cloned element for calculating width (#568)
- Closes #564
6 years ago
Michael Fix 6ab33153a8
Ability to name file downloads (#562)
* Ability to name file downloads

- Closes #561

* fix codemirror-graphql
6 years ago
Michael Fix 386b4a5bf5
Refactor list settings (#553)
* refactor list setting components

* remove mention of font
6 years ago
Mike Fix 01023bb1ad enable react in scope lint rule 6 years ago
Mike Fix 44356be373 make BackgroundSelect extend Component not Pure w/ custom update 6 years ago
Michael Fix 20df18ebec
tune component updates and bump codemirror polling to hit 60 Hz (#493)
* tune componenet updates and bump codemirror polling to hit 60 Hz

* reuse omit
6 years ago
Mike Fix 1067ab3429 Exports 6 years ago
zhao.zhang 2b6a91dfee feat: add atom one-light theme (#499) 6 years ago
Mike Fix 6babce42a9 make page a React components 6 years ago
Mike Fix deb0638e18 add TODO for theme specific styles 6 years ago
Mike Fix f79da0f7f0 fix solarized line numbers styling
- Closes #495
6 years ago
Mike Fix 7bab61ee81 Merge branch 'refactor-stylesheets' 6 years ago
Mike Fix 7c567412dc pull out getRef 6 years ago
Mike Fix 4321c3455f add aria labels 6 years ago
Mike Fix 1451ee2582 remove extra solarized link 6 years ago
Mike Fix 0b366d18f7 refactor stylesheets abstraction 6 years ago
Mike Fix 68469a4dbb rect needs ids 6 years ago
Michael Fix bd695b7fd1
convert ids to classNames, use refs (#488) 6 years ago
Mike Fix e8f72be402 lint 6 years ago
Mike Fix dbbbb2f33f fix Carbon <title> 6 years ago
Mike Fix 9a86e7e7c4 prepare 6 years ago
Mike Fix 8e13d2d05c allow editing in embeds 6 years ago
Mike Fix 25fa1eec6e update copy button text 6 years ago
Mike Fix 004ac6c902 hide cursor 6 years ago
Mike Fix 92a80429f3 move manifest to all pages 6 years ago
Mike Fix c0ff116de8 embeds
expose CodeMirrorLink, load only necessary theme in embed

implement copy button in Carbon window controls

add copy to queryParam

use next/head and metatags in /embed

make editor have router prop

fix now.json rewrites

allow local stylesheets in embed
6 years ago
Mike Fix 1d85149a97 fix api.image call logic 6 years ago
Michael Fix fa983f6fbe
Make carbon a stateless component, move highlight.js calc into render (#479)
* make carbon a stateless component, move highlight.js calc into render

* remove unneeded class function

* inline handleLanguageChange
6 years ago
Michael Fix 09fa737ca1
move localStorage.clear() to prop of Editor (#484) 6 years ago
Mike Fix 6fc3d2b5e1 use react-addons-shallow-compare for comparing state 6 years ago
Tim Neutkens 2e945fc528 Don't use custom history API (#485)
* Add shallowEquals check for onUpdate

* Using Next.js Router instead of custom history API

Fixes https://github.com/zeit/next.js/issues/4994

* Remove urlObject code
6 years ago
Mike Fix d41f05d9c1 update comment 6 years ago
Mike Fix d70c8f0c2a upgrade codemirror CDN links to 5.39.2 (patch) 6 years ago
Mike Fix 5b80d2a7bf add comment about <link rel='preload'> 6 years ago
Mike Fix b19bbf26ae Fix preload for Firefox 6 years ago
Mike Fix ded88c2e40 remove unused aria 'role' 6 years ago
Mike Fix d8f24bda48 add viewport meta tag 6 years ago
Michael Fix 6c9a09e522
Clean up (#481) (patch)
* clean up things

* introduce toggle fn

* remove constructor from Collapse (ignore)

* prettier (ignore)

* make Collapse a PureComponent (ignore)

* give ExportSizeSelect a display name (ignore)

* give ThemeSelect a display name (ignore)

* Toggle: displayName, PureComponent, remove constructor (ignore)

* Meta and Slider display names (ignore)

* remove ThemeSelect constructor (ignore)

* fix lint-staged, prettier
6 years ago
Mike Fix 584a866bc1 fix comment 6 years ago
Michael Fix d3462bb961
Make `api` a prop of Editor (#480) 6 years ago
Michael Fix c22a8e2a0d
Remove gDSFP in Carbon (#477)
* remove gDSFP in Carbon

* add comment
6 years ago
Mike Fix b665dfc5f4 fix pathname issues when using next export 6 years ago
Mike Fix 20f9b5aa82 decoding from local storage bug fix 6 years ago
Mike Fix 0441205217 decode language html correctly 6 years ago
Mike Fix a16141bdfa fix default language dropdown 6 years ago
Michael Fix 0580e1c8e8
Separate API service, deploy frontend statically (#474)
* extract server into separate service

* fix basic tests with url.parse

* use Next withRouter

* remove old custom next rendering
6 years ago
Michael Fix a9b25e05a3
Performance improvements (#458)
* Performance improvements

- Use font-display: swap
- Preload CSS links
- Compress all request payloads

* inline react spinner css

* remove @zeit/next-css, move custom themes to static

* update contributing docs

* spinner styles

* move spinner back to top level

* load codemirror synchronously
6 years ago
Michael Fix 0d2f2f4444
Code split and load prettier dynamically (#471)
* code split and load prettier dynamically;

* move prettier to dependencies
6 years ago
Mike Fix 4f7938d931 Run prettier 6 years ago
Farzad YZ 1747534921 WIP: integration with prettier (#469)
* add basic format with basic parser

* remove format loading

* change formatCode to be sync

* prettier adjustments

* prettier our code

* move prettify into settings menu
6 years ago
Michael Fix 86be3aae35
update spinner for react-codemirror2 (#470) 6 years ago
Michael Fix 2abef908ce
encode text before reading the container width (#466)
* encode text before reading the container width

* isPNG
6 years ago
Jake Dexheimer b7c8466711 fix mobile overflow issue (#468) 6 years ago
Yashu Mittal 22f2ea673e Space mono normal font (#462)
* Arranging in alphabetical order

* Add Space Mono (normal) font

* Added myself as contributor
6 years ago
Michael Fix f018c454bf
Implement PWA functionality (#455)
* implement PWA functionality

* disable tweet button when offline

* just remove tweet button instead
6 years ago
Michael Fix 95f0a27111 Begin responsiveness overhaul (#457)
Closes #435
6 years ago
Mike Fix f8a3499156 safari bug fixes 6 years ago
Vince Speelman a7159f87c2 feat(save): add "copy" button (#441)
* feat(save): add "copy" button

add a button to the save menu called "copy", which opens the raw image data in the window so users
can directly copy it for easy pasting into a variety of apps

#49

* feat(save): open in a new window

update the action to open in a new window and rename it to "open"

* simplify open logic
6 years ago
Mike Fix fd9de34410 fix uri encoding for PNGs 6 years ago
Mike Fix 0525a9fcca Pull out formatTimestamp into function 6 years ago
erick d0d3589dc4 Add optional timestamp to saved file names (#430)
* Add timestamp to file name save

* Add .DS_Store to .gitignore

* Add setting to toggle timestamp on file save

* Tweak timestamp format
6 years ago
Maxim Gerasimov e92e4567de Add Nord theme (#426)
* Add Nord theme

* Add descendant selector in nord.css
6 years ago
Shiranka Miskin 345480e98c Fix crash on dropdown arrowkey movement (#423)
Fixes #420 where the application crashes after selecting a dropdown item
and then pressing the up or down arrow keys.
6 years ago
Winner Crespo 452370772f Adding VS Code's Night Owl theme (#379) 6 years ago
Jake Archibald c4e224df29 Adding line-height setting & granular font size. (#410)
* Adding line-height option. Fixes #406.

* Allowing more granular font size
6 years ago
Mike Fix 926ba9224f Fix % encoding issue 6 years ago
Mike Fix 7b9c31101e Fix replace &nbsp; 6 years ago
greenkeeper[bot] ded4b04349 Update downshift to the latest version 🚀 (#396)
* fix(package): update downshift to version 2.0.0

* Fix for breaking changes
6 years ago
Michael Fix 2a52d101e7
Fix spinner position (#398) 6 years ago
Michael Fix a81107d723 Remove UNSAFE lifecycle methods (#377)
* Remove UNSAFE lifecycle methods

* Fix gDSFP issue

* Extract onBeforeChange

* Remove this from getDerivedStateFromProps
6 years ago
Brian Dennis d885b63b3a add alt text support for Twitter images (#372)
* add alt text support for Twitter images

* move constant declarations up

* Use UNSAFE_cWRP

* remove duplicate TODO (whoops)
6 years ago
greenkeeper[bot] 6368833e16 Update next to the latest version 🚀 (#367)
* fix(package): update next to version 6.0.3

* Fix 'this' in <style jsx> bug

* Better variables
7 years ago
Michael Fix 89931eab59
Add linting back (#349) 7 years ago
Mike Fix dd5a996e72 Fix twitter bug
- Closes #347
7 years ago
Michael Fix 3bbb98a3a2
Revert "Refactor state components (#338)" (#348)
This reverts commit 0a59db56c8.
7 years ago
Michael Fix 0a59db56c8
Refactor state components (#338)
* WIP: Unstated works

* WIP: extract into its own file

* Container instance

* Remove unused variables

* Move toolbar children into Toolbar

* Extract our Coder interface

* Remove top level subscription

* Bug fix

* WIP

* Remove old dependencies

* Add import eslint plugin

* Rename components

- add createRef TODO [ ]

* Bug fixes

* Rename Coder -> CodeWindow

* Address comments

- Rename to variable
- Rename onDrop from Editor containers perspective

* More variable renaming
7 years ago
Michael Fix 80cf355b44
Use gist language response (#343)
* Use gist language response

* Use gist language response - fix when no queryparams are given (#344)

* fix when no queryparams are given
e.g. http://carbon.now.sh/3208813b324d82a9ebd197e4b1c3bae8 would still not set the language property because the initialState is null

* move gist language to its own test

* Update test
7 years ago
Mike Fix e02d5e1ddf Add TODOs when upgrading to React@16.3 7 years ago
Vernon de Goede f8579bac73 Add support for Verminal theme 💅 (#341)
* Add verminal theme.

* Only decrease opacity if vibrancy is supported.

* Use Framer Syntax.

* Reset constants.

* Don't prefill example env variables.
7 years ago
Michael Fix ce5cc92aa3
Editor refactors (#336) 7 years ago
Michael Fix 2276435fef
Fix svg using Blob URLs (#332) 7 years ago
Mike Fix 517aca7c8f Fix user upload bug 7 years ago
Eric Adamski fd63008f12 Add Supoprt for IBM Plex Mono (#324)
* Add support for IBM Plex Mono (Italic) font

* Add myself as a contributor

* Alphabetize Fonts
7 years ago
Steven Sacks 9e519e2b5f fix issue #321 - load defaults, then localStorage, then url config (#322)
* fix issue #321 - load defaults, then localStorage, then url config

* update comment and also do not need current state
7 years ago
briandennis f49b7649fb reorganize custom themes/modes 7 years ago
Ben Jervis f15d7a83e2 Adds Atom's One Dark theme (#319)
* Adds Atom's One Dark theme

* Moves one-dark.css into static

* Moves the file from a stylesheet link to an import

* Removes the link from constants
7 years ago
Camron Flanders 98403b2ad2 Add Monoid Font (#314)
* Add Fantasque Sans Mono as font-face

* Add Fantasque Sans mono to constants

* Set to regular weight, not bold

* forgot to add myself as contrib

* add Monoid font
7 years ago
Mike Fix 81ad041f37 Fix opacity bug
- Closes #317
7 years ago
Jake Dexheimer cf1e92b8cb Use Unsplash API (#301)
* Add unsplash-js, isomorphic-fetch

* /unsplash route/handling

* RandomImage use unsplash api

* Implement Photographer accredidation

* Add referral link

* Fetch photographer profile_url from unsplash api

* Change credit copy

* Add PhotoCredit component
7 years ago
Camron Flanders eef096bc49 Add Fantasque Sans Mono font (#313)
* Add Fantasque Sans Mono as font-face

* Add Fantasque Sans mono to constants

* Set to regular weight, not bold
7 years ago
Michael Fix 5691236934
Refactor index.js (#310)
* Move Editor to components

* Separate index and editor a little

* Revert dynamic import of hljs b/c it's critical

* Move query param update to index.js

* Clean up editor further
7 years ago
Mike Fix d6a31941d5 Add default Seti link tag to prevent code flash 7 years ago
Ian Wang 6bf64a6ae0 delay loading highlightjs & codemirror theme (#309) 7 years ago
Mike Fix 1f9076c679 Implement Shift-tab to dedent
- Closes #304
7 years ago
Michael Fix 5a4cdd7d7f
Lint and fix issues, don't add linting yet though (#293)
* Lint and fix issue, don't add linting yet though

* Clean up

* Remove /about href
7 years ago
Michael Fix a6324586eb Performance improvements (#287)
* Perf improvements. Limit rerender on keystrokes

* Spread settings props, make dropdowns and carbon pure

* Remove last TODO

* Pass state into value of titleBar input

* Clean up
7 years ago
Raphael Amorim 7f40e9b469 [WIP] add lucario as theme option and update contributors (#292)
* add lucario as theme option and update contributors

* undo miss change

* update codemirror to latest
7 years ago
Jake Dexheimer 8a814beed3 Fix dropdown minWidth issue 7 years ago
Jake Dexheimer 04de6cae53 Remove body height 7 years ago
Jake Dexheimer c6be4f0295 prettier 7 years ago
Jake Dexheimer 0dc47db39f Fix css style imports 7 years ago
Jake Dexheimer 4bfde22b48 Clear dropdown input on open 7 years ago
Mike Fix ba1d550cd3 Fix RandomImage 7 years ago
Mike Fix c7e39c5e36 Fix url() by only rendering SketchPicker browser side 7 years ago
Mike Fix 7a0153dcda Fix downshift id issue 7 years ago
Michael Fix 7d95eb44b4
Improve Perf 1 (#282)
* Inline stylesheets

* Minify CSS

* Use Next CSS imports instead
7 years ago
Michael Fix d77ff14e05
Implement typeable dropdowns (#283)
* Implement typeable dropdowns

- Closes #276

* Fix up and down arrows

* Use instance variables for state and user input

* Bug fixes

* Pass getButtonProps
7 years ago
Mike Fix c47eb97c3a Theme color [PWA] 7 years ago
Mike Fix 6e01e9be59 Accessability improvements 7 years ago
Mike Fix b9b22f8034 Use instance variables 7 years ago
Jake Dexheimer 400a42bf77 Use different wallpaper collection, dedupe images, add loading spinner 7 years ago
Jake Dexheimer f79d01ad9b Add RandomImage component 7 years ago
Jake Dexheimer 9499248e1c
Add watermark feature (#274)
* Add watermark feature

* Change watermark to carbon logo

* Fix double borders
7 years ago
Jake Dexheimer ec412e6391 Fix height overflow 7 years ago
Jake Dexheimer d3633743f8 dropdown user-select:none 7 years ago
Jake Dexheimer f1760129d6 Fix window theme svg BG 7 years ago
Jake Dexheimer 4d9793f3df Remove non-woff fonts 7 years ago
Jake Dexheimer c90099f72a Merge remote-tracking branch 'origin/master' into HEAD 7 years ago
Jake Dexheimer 12ce55b89a Remove non-woff fonts 7 years ago
Jake Dexheimer e8bb4ac0e0 Add button dropdown 7 years ago
Michael Fix 70928b765e Iosevka font (#268)
- Closes #233
7 years ago
Jake Dexheimer f28d80c250 Minor windowTitle positioning change 7 years ago
Jake Dexheimer 4c86468e50 Rename ResolutionSelect 7 years ago
Takahiko Inayama b7adab9bea Support variable export sizes (#264) 7 years ago
Mark Molnar b1ef2d1263 Feature: Window Title (#257)
* Added title bar

* Added state for title bar
7 years ago
Mark Molnar d044beb977 Feature: Squared Image (#250)
* Added squared images feature

* Moved 'Squared image' to advanced dropdown
7 years ago
Jake Dexheimer 3c0b3dd387 Fix dropdown hover/width, window themes bg 7 years ago
briandennis f7771aee8c remove blue outline from dropdown 7 years ago
Bruno C. Couto 83d30234a3 Add support to keyboard navigation in Dropdowns
The user can navigate through the Themes and Languages selects using the
keyboard arrow down and up keys.
7 years ago
briandennis 5a11b115e0 if no selected value, provide default value 7 years ago
Jake Dexheimer c50fc497b6 Fix footer font-size 7 years ago
Jake Dexheimer e5f4321c9e Increase max vertical padding 7 years ago
Dillon Mulroy 91cf4b7734 import default settings from constants 7 years ago
Dillon Mulroy 700872c188 Change string casing for menu option to be consistent 7 years ago
Dillon Mulroy 6fa28a0062 Add reset option in advanced options + all contributors addition. 7 years ago
Michael Fix 048ab355ff First accessability changes (#200)
* First accessability changes

* Add <main>

* <header>
7 years ago
Mike Fix 4e15b66001 Add save as dropdown (needs reconfiguring + style) 7 years ago
Michael Fix 3d4ba85732
Sanitize color inputs (#196)
* Sanitize color inputs

* Remove unneeded dep

* Move to constants

* Case insensative
7 years ago
Mike Fix ba7da58f2b Fix potential background issue 7 years ago
Mike Fix 412abda0da Some screen reader adjustments 7 years ago
Mike Fix b44ecff6ea XSS 7 years ago
Jake Dexheimer d314b8643b
Consistent borders (#190)
* Use 1px border width

* Fix double border width on collapse element
7 years ago
Hugo a69a3f2e44 Add Oceanic Next theme (#167)
* Add Oceanic Next theme

* Update Codemirror to 5.34.0
7 years ago
Mike Fix 9d1f05ad0f Fix Hack default 7 years ago