revelry_content 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +177 -6
- data/Rakefile +34 -0
- data/app/assets/fonts/icomoon.eot +0 -0
- data/app/assets/fonts/icomoon.svg +20 -0
- data/app/assets/fonts/icomoon.ttf +0 -0
- data/app/assets/fonts/icomoon.woff +0 -0
- data/app/assets/javascripts/revelry_content.js.coffee +21 -0
- data/app/assets/javascripts/revelry_content/components/Admin.js.cjsx +90 -0
- data/app/assets/javascripts/revelry_content/components/EditModeButton.js.cjsx +16 -0
- data/app/assets/javascripts/revelry_content/components/Loader.js.cjsx +10 -0
- data/app/assets/javascripts/revelry_content/components/Time.js.cjsx +15 -0
- data/app/assets/javascripts/revelry_content/components/TopBar.js.cjsx +20 -0
- data/app/assets/javascripts/revelry_content/components/editor.js.coffee +295 -0
- data/app/assets/javascripts/revelry_content/components/versions.js.coffee +170 -0
- data/app/assets/javascripts/revelry_content/config.js.coffee.erb +2 -0
- data/app/assets/javascripts/revelry_content/mixins/EditModeListener.coffee +9 -0
- data/app/assets/javascripts/revelry_content/models/Content.js.coffee +16 -0
- data/app/assets/javascripts/revelry_content/models/Version.js.coffee +8 -0
- data/app/assets/javascripts/revelry_content/server_side.js.coffee +10 -0
- data/app/assets/javascripts/revelry_content/utilities.js +69 -0
- data/app/assets/javascripts/vendor/react_ujs.js +64 -0
- data/app/assets/stylesheets/revelry_content/application.scss +22 -0
- data/app/assets/stylesheets/revelry_content/components/EditableList.scss +42 -0
- data/app/assets/stylesheets/revelry_content/components/buttons.scss +137 -0
- data/app/assets/stylesheets/revelry_content/components/editors.scss +62 -0
- data/app/assets/stylesheets/revelry_content/components/loader.scss +53 -0
- data/app/assets/stylesheets/revelry_content/components/topBar.scss +42 -0
- data/app/assets/stylesheets/revelry_content/components/version.scss +72 -0
- data/app/assets/stylesheets/revelry_content/layout.scss +36 -0
- data/app/assets/stylesheets/revelry_content/modules/base.scss +3 -0
- data/app/assets/stylesheets/revelry_content/modules/colors.scss +14 -0
- data/app/assets/stylesheets/revelry_content/modules/mixins.scss +0 -0
- data/app/assets/stylesheets/revelry_content/modules/vars.scss +46 -0
- data/app/assets/stylesheets/revelry_content/partials/iconStyle.scss +91 -0
- data/app/assets/stylesheets/revelry_content/partials/utilities.scss +10 -0
- data/app/assets/stylesheets/revelry_content/reset.scss +21 -0
- data/app/controllers/revelry_content/application_controller.rb +4 -0
- data/app/controllers/revelry_content/contents_controller.rb +63 -0
- data/app/controllers/revelry_content/versions_controller.rb +36 -0
- data/app/helpers/revelry_content/application_helper.rb +4 -0
- data/app/helpers/revelry_content/contents_helper.rb +29 -0
- data/app/models/revelry_content/content.rb +167 -0
- data/app/models/revelry_content/content_version.rb +21 -0
- data/app/uploaders/src_uploader.rb +48 -0
- data/app/views/layouts/revelry_content/application.html.erb +14 -0
- data/app/views/revelry_content/contents/_menus.html.erb +2 -0
- data/app/views/revelry_content/contents/index.html.erb +1 -0
- data/config/routes.rb +14 -0
- data/lib/generators/revelry_content/install_generator.rb +25 -0
- data/lib/generators/revelry_content/templates/create_revelry_content_contents.rb +12 -0
- data/lib/generators/revelry_content/templates/create_versions.rb +14 -0
- data/lib/revelry_content.rb +38 -0
- data/lib/revelry_content/configuration.rb +69 -0
- data/lib/revelry_content/controller_concern.rb +11 -0
- data/lib/revelry_content/engine.rb +22 -0
- data/lib/revelry_content/js_exporter.rb +15 -0
- data/lib/revelry_content/model_concern.rb +11 -0
- data/lib/revelry_content/railtie.rb +7 -0
- data/lib/revelry_content/version.rb +3 -0
- data/lib/tasks/revelry_content_tasks.rake +6 -0
- data/test/controllers/revelry_content/contents_controller_test.rb +9 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +1 -0
- data/test/dummy/app/assets/javascripts/home.js +2 -0
- data/test/dummy/app/assets/stylesheets/application.scss +14 -0
- data/test/dummy/app/controllers/application_controller.rb +10 -0
- data/test/dummy/app/controllers/home_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/home_helper.rb +2 -0
- data/test/dummy/app/models/fake_user.rb +5 -0
- data/test/dummy/app/views/home/index.html.erb +16 -0
- data/test/dummy/app/views/layouts/application.html.erb +16 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +32 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/carrierwave.rb +5 -0
- data/test/dummy/config/initializers/content.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/revelry_content.rb +2 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/papertrail.rb +1 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20150427211438_create_revelry_content_contents.rb +12 -0
- data/test/dummy/db/migrate/20150427212126_create_versions.rb +14 -0
- data/test/dummy/db/schema.rb +38 -0
- data/test/dummy/log/development.log +1415 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/test/controllers/home_controller_test.rb +7 -0
- data/test/dummy/test/helpers/home_helper_test.rb +4 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/-I_fh6Ob3TV3ynXTvv2TsuKA8cQq62L1tKIrIuNXWjA.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/-YnOULGJdPpgh539S1Ms1ELd5--WkKXQZL4yYylOy-0.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/01i3BQNbZnC6BxmgguLy4xMYU2RnsNjDy_lEOEdzhxY.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/0CsApXQBjT34U567rgWiQGYOFwIpgM1ZcV3ZvrXPAXg.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/0LnMwfkPx0KckDudP0t_qfcIfrUx2JEt9_W28i5ota8.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/0Soh65Z50qGQ79OzRV5ywJzksbLPZ9Y7Xukmqyr6k5E.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/0XbuhYD4hx4ktBwomnPqrp-8ofGrK18w0XFrKr9A0TQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/1aGcEQlzCZqj47bR8b18bidGhSM2TCoUF8PH47DmsLU.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/1k4qrvfTSqyZpqJotrEJvryNYKwAYhcPYDr762tOceA.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/1qAjZK81hSd2VjC4whKNDW4X7SdJpLItpFtUW5R2vUU.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/1tgQBRMWbVAGLWkDo0fO1_ePFLz60fDuTdCKwp-LIJU.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/22e58P_cEp6-Pu5wgZqEMEpiJGooGJ2dI6gfNXacBaw.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/2ZbqEyDxBgh2_LtnR16sYKThwIziSqlASeCjQjkwL7Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/2t8ZjvFIs5Qg2owTTr20k8NqE0dCrbY5mHTjJGQd2To.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/4cBcXkgJSg0A9kNtcagSpP-C7RpYMO7GIYMiIdC0K48.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/4eWrs3PFkK1uDMlHgGflFhNtKLF63kY4nMqArSbZBpY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/5-_j0ZY9kq3RzZvSq8dpYirIlmqsRJUSBNkE97ZcqWY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/55ea_CKRYg4qGN5pyZy2H1oKxEnbQuJzgGyrVQ1ZE-k.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/5PZzqc1OeigG9XRqgCM3SCT9fLVn6wTm6awQx74XAD0.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/5WUZd0B2PMhhtp-V7XsX5zFLOPXl9z2WpIVdT8rW5AE.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/5cWdZIkyqWp1hyfiXzGiMnuqZ_4SlHG0DmWpUkQYuS8.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/5wFIFg4lQ-rd1ZWBhlRi9J56-EqjP61WWYq0jOA7bek.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/6COX4oqZCCZnmoes6ehqGZqIr2xtXv5HVYqJzRnccnU.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/6Ck5oeyDTZNctS2vkmtYRv6UU5SCv8DW_cqAumQHEW4.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/6W7Zp0ylWiCA_3Z-Hese0EPiWLITfAv2OViiC3GHvzU.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/6ajykKpm3QojPPBBJIx6vRImRgKpc_V_zX68dF-yV1Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/75Qu5KXpoOg--ZIa5yMWG0sQS_OoZiF0og8GEfCKodI.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/78FVepsCcIAm-tqmhFYO4eaDkF1BHiAwzZjoc1W6XrI.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/7OzH_p-6ZYmSIl-UNVwWQfD6PJHalPe5Y01jCP_MF1w.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/856F5ONTmAq3bpS5lqrZAzppRy4gwhAkugo9inM3EEU.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/8AVC27x21kixmECkHeOm4sR-mSbzhJO320NRwrW6B38.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/8KCGLeeBgsHpq-GGsxAKvONGThHONpkBhLmQv5x-5i8.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/8cyMCW5yogfK5gPFpci4rPtVb8pVIiZmF5DpOH8F07Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/9EThCCo9tuqXzBz-afDke-GvEyM_NG0dxw7dSdkzINw.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/9NoeClumq19p-VmRk5PPOHLvDXN_Jr6BCYnczJWWfv4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/9YD7CWCBCkOdAYp-yB8nGhaNDiiUWsP7fzRWPmHbzKI.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/AY9mbclr0zMOzxzP4BYRTYyvBOlpLFHHQAimzs6dSDI.cache +38 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/AqkMYZH-ERTqi-15YvdhRVtysLKqim5CV7-GILZNras.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Au8GVVKkzmp8TySAWMgFJQObozIt4Mr-RW5BolO8J2k.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/BBPtOTznDSAhX5tIqbw_JRw9Cppz2SVtSFsJ1CpC37k.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/CC0dQuHqBjWqdKsRp2Ntw6nn3M1nC5lUY-dd8lMzJ6Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/CWYN7KxLVsU-N9FbSIrHgO979x5b6AeyckCfZ892Y7k.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/C_Sjupfz09XcSquDwczKxSTxWrEUrjaf49VmA5x68CQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/CcJCtip5hherUpH0eiHdJI5Stl08Txl1AU8NxDLKtro.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Clf7dMHxXwzeU3tZ2yxP8d3xr0HRWHFMdqjBuSceJZ0.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Cnkk4N8ysSWHH6ujQDBGzEiLuGa0dVNDL5Zq53tJq-M.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/D0USxWIEUAxLvX9bhYdtB_SXMXAJ9nQr9vewnyqrk5k.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Dy0AC2wVM0afv2MB-u7UGGLsb_2ExNZ8S6w7SGE-djg.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Ee1BFKugxHkzKUuAsIqQc60hV47E4VSUMZwBOThvSeY.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/EghXS1aAsnoopkxb4Fv0S21wqJGL59ryH5HV9-30KI8.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Eq8I8ukRZZ9BZ2SQxzSNc8mOoyKksxtzwtDh2FRZ1FE.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Eu26_D_tZu1dr7mVRA4F2--NUZ2UMM4QRXv9JcqO2TY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/FEfkZdxv5MUSvLMUUWoC3lif13VZBbiaUYPNv8uizgM.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/FF9LKRGOPVZl03UeeMXbHRXBFwG4SkAdOfcDClwXXx8.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/F_NOlk6iL-Gonygn5tsU_AaDA69HBxeExwCiAa6Ezi4.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/FuMG_mCkNUt0OV_qrahX3ne-LN8Y3J-17T-I5BwYT_U.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/FzIl4k5FDcnN8SbzckzMXWXsj2DwBv_tGvZZky8_cvk.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/GBe9GA2qATaLqF7GTbxcZ8sWcPJ2zWeT8PFE8Cynb4U.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/GUcaNDg0KOqTIS7ltde6vWEZy4eTkdPuecVr52xaqY4.cache +4 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/GWveyzQul11IW7JP-MFTH1p2O-FAiSldGQCixPtBWZc.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/H8Py9_cLtmjiNd1zVjVpr-60bPm8OKt1NzBdYpuRoSg.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/HIOnKEwfKW9leZhYm8hw2zTPcTC7Lhr9QO3pGkpVUC0.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/IUOCPt0S05lp6-q_7CuqTJjuySoP7ZTTe1srP_Sgdag.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/IlxQ_nfFkpBhgHXJ9EL7TgHKTrQYX_1ockXtSOHH_1Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Intu4bn50Zl1tGpuw8N2VhNjvLeG367yEoPjIxYkYxA.cache +49 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/J3EzfF5t_RDdiaU-svpP2DBjb8gnlHHHCQjjpPvzvpk.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/J5rhZ_6c58sjOvHqDBBBBTvsLDbUGfHatkjiF1M-Fys.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/JP9pt25R98BIDqvwjp_DgmdNj4U1wLrVUhOnoDtekS8.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/K2yr6YhOBxRdaqrHViPlAYUKVTWMlI24INQctCW0rWQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/LT9baTsZAaEEgS5raUZGGsP2vTnlzW9LzvyCfQgqLLs.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/LW03HTHDvMz6l4ReQ29sJeZqRg3QLrcVdAutCg9ROyU.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/LcZdIStJUZnaKHh7vs-yLld_jzO3MSU4gCJaORFrjYk.cache +7 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/LruVN3C21yeFX4pfE6ZQw7z2CzkYXY5b8PXOTfz2o1E.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/M2tXWSvBjMhGoQLT8CaoVYULKWDVirToNVLYqstyW-g.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/MJxRV2KlWMJ5KrraeWvC4yp7N4-aMpktlzqBpoLhft8.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/NGgP2dkovkWF23p4ypqAUEO3kldLkAA7E9hERHoxJ_M.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/NX-xwAHuCC7QChZD4MSpX9fgCXgl532SBhXfSsIxG4k.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/OQdV6HhyTI5Otzo9cwR6IY-8eX0eip8x561B8hXKikY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/OSmr2Sj9749HFHCMkGsJP2YGkQxIztofCliXs0urGE8.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/P73ImcSy1BYWt27ZGM-JKdkbzyIm2063NZr-dn-ygPE.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/PVxgcRUvLL0uRj6ScbeM7YyccWyjP2O2kvs2640MHck.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/PmcUgH3Y4bLndb9k4NAJlxdFPTXl3T8-jEskNYv7T9M.cache +15 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/PmrPSezdyM_8N-tzxdbn62XyY_l-YJPz7Tm7Qi1z2_M.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/QAr8mslUFMN0vPkEEQAZEbAUGes7lnpEtfFtKSK8lCc.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/QFioo2rOp-ljy1-PIoxzqOTmxmc6HFAft-qNbbQvfkQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/QPGkAA8L-cs-AO80ws0mqld73EIG2HCd8hzkga35Ydc.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/QaJhvzKs8vkSfWT534wn8jNcxfcnMDp4i8cDbwWESbs.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/RICRLw8IGgYZrEFYgyA-MY8-o_kXcmcY1gCavTvwW64.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/RgyohxMtV3OKNhuwrAaDjfXMV7SsjprKrEVgZ6NhwzE.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/RsbxexS-d0Msc_BIthGWINzE8v7aFHiWQVqTbifUHp4.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/SZlNp_5FFT99-2Qs5TFLbTZ4ZOG2UFO6sExA-aa-9Xc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/T5Z3oNqbaal-reBCFzxyo8yxV-drGVwQjIC1O_pkHNI.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/T6Ft0zMwwCntps471lA0_0aXo1KaOp-ZFeptSt9SRks.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/TQ7i9C1sBaWIfDFYnQo4TqjBOMYbOVxm6f4Qhl0Uf6M.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/TR10mW2AT2rabnCmUhSF2tBx-ZpQJZfpoezdescBWxg.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/TSR9oCO5WIJZHL855zPdgj-pvzkWlz0vlnIPSMRudy4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/V9W2dbEVRrR0tD27e8bft0flt50g1HHugzTd7lFVoMY.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/VHnCzqYhXqo4PNpfO5rhh1rxxllOWMQWrJ_1an8CxJ8.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Vs4mCFlsskLe0HvAg_ODhYRP8lNofUxZ45d6sOzUfC0.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/VsHDpo2bcpN87OPpULfpEIuC7ArNRDa4RgDTqYSgbbc.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/W1XNy0_UmGwk7xmb-0QiIdkD_gx_tjV351xE8X5LCPY.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/WEPPUYRJVm2CgPjW9cTdBuuFhadPuO7qPEqvqecfKjg.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/WIwRcAEBsLT7LSFw8071ukLJbJlwFoX_JaHD9w7fEAc.cache +16 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/WSR5PdIRaA9ix0LLhrUegJL8ztgPoIgZHdaq1d3Jm7k.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/WxVFbgL4Oty9vrd1AD37P2KqOGjwvcH5o_LSGrMI_do.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/XSXbBZ-YPcBvmUp0fzcIUcTwqNvYHvUU7xfLa38qYvg.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/YB9oCB5SEQMC6OwASUsvmD1GE90Ul31VfE2ZRo1Hd2k.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/Yf6ZOsV9gRVVFTsRNcQPGxKgCQ63L3JprFkpZMD0slI.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/YjXlZUeBr9ONZpMKis8Beab3ld-NdnlSKXm2oZOsysc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ZBbRPnK9QPeL_bLmZNttUrL0MMH6DtrYDpD4f1DbYtc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/_7w_iwIfp6xsakWz0Ww-HrRNserrl5q6WzSq1iYZGaQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/_k6iDcm-RS6SK8ChV7hlp56ZM2bVtgzaDCrpSHIDFZ4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/_tne4TjP6WhsfK-a0TBVts5lr-lr-sDxyQiKIugRPhM.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/_zOYmE_ymvMvcRhHFdH2JutNJimhiytkMAhh4Oq6mkk.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/aDjgtkQ97t1Rcjxv5nZUTSSYXea5orrfkCeCNrlNNao.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/aKAjc-eEaECxCE89czdDC52Kqkw11EBSF9vk7QorxPA.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/auLKIVQfT6ZcV9nSxkDD4xMrcIRtB_1-hO1qKXOcwxo.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/axJrczuMPd6m4cWaLl9wfSWgg5SWjyHvv1N0d8e7cas.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/cWuWB7O6uRomqwh3IemLWVclp4_ioPR7TBAF7yrPpV0.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ciEBvpxWzLqer60DBJkr319p1iKyYHZxfCm3tIPMqcI.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ct5UmPAxknsInqDq17r9u_NbuFw8F6w4ZLKNU05xZ_Q.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/cxW0sGi1l_Lc7eCBF8kxQo4kNtHw27K5H-Ngpiixm2A.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/d7lXJjCfvSvwTWSI3x4kn3TQzzYG0DGvqTOJL3avl6Y.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/dW3LJvt2E0gKdWoqZTSTWtntGqxhTENv8_-mbT_kfn0.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/dfT6vHCtyIBci9lpNUVgyqepSYt55BCo8MDzrPXxUEw.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/e7OkNhH6RmnQjEY0ZEO597J545crZH0qZdVDYz71KT4.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ea-3NiBlut0EOdCVqVGn-RwNm0CiwA8YVBRqfRqhgLg.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/eqpR2RCSOj4T0wmrPGJDb_td3gtOdiyLwD02BpzuBkg.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/eqrwo9jjG9uZiNQCUMkdkvT40JGz2uvrufAv-l00X1k.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/fG1WmTPapxY9EMQ5D8HQw8E2MpudT32v--jD6VgazTU.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/fLosOyYOiUc-ZJIEAtgmz68UfDVlAVCVMAxtAlML-nQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/faEE1R7Sb00wgGFfL9FC9IqAGSkEHNY7rLPURjZVFv0.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/fgmBwPUcbsTKyMd7bxMbzh9YFF7GkD269KSZbCOpe54.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/g4m06tmSxrOnDxGpUyYkIEY8hi0ymUoUzYMAh06YkGc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/gP9Pm0rpnz4IvvhguI8VxK8xhDKU8WisGwfm5ox97RY.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/gtka4cvnxw2bm_SnkE-5LxtRYKxD-MvM_T7lYxdLAug.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/hQFzaNvvDOyvg2U4FZcg-xUjctMTLEdb7tK-RYIziz8.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/hcS2HARtyE_tpJmmwUqYO-9e-Tshg3TF6W6XL29_cwM.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/hdMwJqicGzH0qHgBqMVfxHB8u3-zdirRgb1zpnRfb6w.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/hfIPOqDhaIk7vhQa4hLyWEIQasPwJSn3H-i2egLuFvQ.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/i3Mr4BCaCS865aFe9brU973ERtfoSONrUQhX5FW509w.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/jBOiy_uvOKOoBovFao2qEf6xVkGYRFmw-CR_I756N5g.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/jZZQUkAYSpxGGWp7Vb_vs2S3Clde8_XKFWwjwHaBmU0.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/jiUvf7zJxbsJ9a9IiZOy06PqL6dOOfprzyXci5p8vMM.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/kd10Jyu0ZXLelGbmQo03cFEKpR0qQRw-QyPPMlnY-FQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/ksZL57FCLWVpXdOSIHVytq_XIsGz78TdArP4aWt7uQA.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/l4Mb7Zqpi9HWWa67ftgd_ZkPTvGuhxm--tpHlgu4Eyc.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/m3gQ2mqyaWT0r9UVJriOzT0qkFiL4aZ5mhMgbbyLmyw.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/n6NcZJQK0j-WDDTq_7wksLUZBBYhGRPaW38Cua19t4E.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/nKs1V_XYWUW2uG9E7WQPaiVIvYx2I5ttwdMZ9bRsUVY.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/oB34rjWhV_SBgt62MMSw20hEYuiVTjLMILeSBjagbDo.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/oydOGeF22N2dttfBS68MA5PK4ofniHzd-LgBwVmJvI4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/pA1evykc28UE2mszGRw015uHbbmBCU9gFZIcU8Hrwls.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/pBYZnqSsUmggXeAPQXcQrZSfrScDOEsZQdeXOIqfHaA.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/pENTpYJeZrQ-P80SXbbHVaXcEd7kaOm1bZRItPVK7OE.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/pYKIN2HEVMsGLDogjm8iDQ_4W8iGEq98NsJbOdA822o.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/pb5zODtFDJpqFTtbh09cOhwG1mZowQW1EZ-54eauNTc.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/pnDWkMT2Wf6v8kCepJzn9oEGWrxNOY-H9MlCq85zTlU.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/qJ6pwEWoy3oUs_aPayRv5D5d_F7oEyNIzxrJCaEpcpM.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/rJ88KtO5aBXvyE9sef5emc-MsAJaTna76vG5TNayYa4.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/rPyv5XauOpu-aOgB95w5ZSl6jCFUGvS8YE1h1eZZID0.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/rcp1tSuAgctt1BdAdUoGgD_UtZeD7w3rLuANXg8YU58.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/rfYNZtDWV3PCq5a57xTyj0-_iC1Psq1TaxWG86fXR2A.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/smmkAgu4NNfatz7vllczgMFH_tckzDUAmeV3WvmmsRE.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/szDR2M9t_osfhsE_agd1lcIjKrl5nwRmORMlyoWxTus.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/t4fruk986h623vtFPEW2sALWc3kl3ayPfBbgOzRm6Cs.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/tJDIhl16K_HokIK8UZx1y9hy-Ne6lk9ie2kMbsHVxdY.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/tSDhvZZY2gcpUHWppbAMQYQL0iNPOc3Vo2HHrnqKlDw.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/tYYAXLHGMIYQ1Ls-jw8thSBIzdixEpeQC2kg6irmEy0.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/tgFK--mLRPBU9bZUb6lc4kt6Qq9-Ux6AAfG7mDQBpu8.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/tpBLVkgP9PSqHqSHfPf9ZLar0vHGOTCOUl0FKOqGN54.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/u0B5U9yc20iANkRJi6-SiyL9U5RMrThVGmgnWSR2Rew.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/vtTvV-oGMOMD-l4YDTQRNHPiFRebBjqEfL9IoavTSGE.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/w3rjuVGSs9xUdab61H5KOFtoRsLH5abeNs9uloC2b94.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/w9RM9nORoFIx66Xb5PwygnSIR3922sjAkZkXvyeykgE.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/wK-n2sVphfsiv5g-IV404qJkdw6Skfo5wk55Yf8IHfs.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/wbSRRkjts6z6OP0o88ZwLIz6Za9iMMeF8F1FMAubBxc.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/xE9HS1AxUe2VZv8zzVYALc75Yhv53_LPpQNxurm0oSI.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/xX3QhVOxSxG9HjrdSvjeQoK1iBpYJX3Kw-yjea2vSuo.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/xa4ZU0nFS4WqDtDriIXMlwNURqkpUm_djZVqiz0ZynA.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/xzsnr6Bgr0MP4j4FZVUcYBADfkQCUHoShH_9hGp0ckk.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/y6xgU0dR6b-1_hjgAZAhFFq1T9zGZ8yjUQzOefGpcu8.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/yJ9qoQ6ZeEPmm4ttulT9hdYPemgTF4VUSdmFjmr9Vpw.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/yJuZz8Lopwyvmy-rto8ycJ0nOLWeWSobCY8z-421Bec.cache +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/yLZAaEFOlOcJfmo3pRpRpTiQMzBcqSRTrZYb_pJpTBs.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/yV9yGvP4CDMeEbb4ff4n_Hzu-GuBbM-S39cIE1WQy6Y.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/y_4IIBYH_ItxQoEeXjWm9Igwn6hAkl669CNtYfo0fyI.cache +1 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/zF_lfa7oUNjRgtepm9Ufi0DCzN_IXCJTDHRrH-JHu7Q.cache +2 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/v3.0/zeqXKQA7lKQnvEaJsDO404ZaYCV0dk57z-SXUkfmz24.cache +1 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- data/test/dummy/vendor/assets/javascripts/revelry_content/content.js +4 -0
- data/test/fixtures/rev_content/contents.yml +11 -0
- data/test/helpers/rev_content/contents_helper_test.rb +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/models/rev_content/content_test.rb +9 -0
- data/test/revelry_content_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +605 -42
@@ -0,0 +1,170 @@
|
|
1
|
+
# @cjsx
|
2
|
+
|
3
|
+
RevelryContent.Utilities.lazyComponentDefinition ->
|
4
|
+
RevelryContent.VersionCard = React.createClass
|
5
|
+
getEventString: ->
|
6
|
+
if @props.version.get('event').indexOf('rollback') > -1
|
7
|
+
'Rollback'
|
8
|
+
else if @props.version.get('event').indexOf('import') > -1
|
9
|
+
'Import'
|
10
|
+
else
|
11
|
+
s = @props.version.get('event')
|
12
|
+
s.charAt(0).toUpperCase() + s.slice(1)
|
13
|
+
|
14
|
+
getInitialState: ->
|
15
|
+
state =
|
16
|
+
expanded: false
|
17
|
+
|
18
|
+
truncatedContent: ->
|
19
|
+
s = @props.version.get('reify').content
|
20
|
+
if s? && s.length > 200
|
21
|
+
<span>
|
22
|
+
{ s[0...200] }
|
23
|
+
<a href="#" onClick={ => @setState expanded: true } className="Version-preview--containerExpand">[more…]</a>
|
24
|
+
</span>
|
25
|
+
else
|
26
|
+
<span>{ s }</span>
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
render: ->
|
31
|
+
<div className="EditablePage">
|
32
|
+
<form action="#{ RevelryContent.base_path }versions/#{ @props.version.id }/revert_all_to" method="POST">
|
33
|
+
<input type="hidden" name="authenticity_token" value={ RevelryContent.Utilities.getAuthenticityToken() } />
|
34
|
+
<input type="hidden" name="_method" value="delete" />
|
35
|
+
<button className="Button Rollback">Change to this version</button>
|
36
|
+
</form>
|
37
|
+
<ul className="EditablePage-contents">
|
38
|
+
<div className="Version-rolledBack">
|
39
|
+
<p>
|
40
|
+
<strong>
|
41
|
+
{
|
42
|
+
@getEventString()
|
43
|
+
}
|
44
|
+
on:
|
45
|
+
</strong>
|
46
|
+
<RevelryContent.Timestamp datetime={ @props.version.get('created_at') } withTimeAgo />
|
47
|
+
</p>
|
48
|
+
{
|
49
|
+
if @props.version.get('whodunnit')
|
50
|
+
<p>
|
51
|
+
<strong>By:</strong> { @props.version.get('whodunnit') }
|
52
|
+
</p>
|
53
|
+
}
|
54
|
+
</div>
|
55
|
+
|
56
|
+
<div className="Version-preview">
|
57
|
+
{
|
58
|
+
if @props.version.get('reify')?.src?
|
59
|
+
<div className="Version-previewContainer">
|
60
|
+
<img src={ @props.version.get('reify').src } />
|
61
|
+
</div>
|
62
|
+
else if @props.version.get('reify')?.content?
|
63
|
+
<div className="Version-previewContainer--text">
|
64
|
+
<span>
|
65
|
+
{
|
66
|
+
if @state.expanded
|
67
|
+
<span>{ @props.version.get('reify').content }</span>
|
68
|
+
else
|
69
|
+
<span>{ @truncatedContent() }</span>
|
70
|
+
}
|
71
|
+
</span>
|
72
|
+
</div>
|
73
|
+
}
|
74
|
+
</div>
|
75
|
+
</ul>
|
76
|
+
</div>
|
77
|
+
|
78
|
+
RevelryContent.RollbackGroup = React.createClass
|
79
|
+
getInitialState: ->
|
80
|
+
state =
|
81
|
+
open: false
|
82
|
+
|
83
|
+
classes: ->
|
84
|
+
React.addons.classSet 'Versions-rollbackGroup': true, 'Versions-rollbackGroup--open': @state.open
|
85
|
+
|
86
|
+
render: ->
|
87
|
+
<div className={ @classes() }>
|
88
|
+
<h5>
|
89
|
+
Rollback on { moment(@props.rollbackGroup[0].get('created_at')).format('ddd M/D/YYYY') }
|
90
|
+
{
|
91
|
+
unless @state.open
|
92
|
+
<button className="Button Rollback" onClick={ => @setState open: true }>Details</button>
|
93
|
+
}
|
94
|
+
</h5>
|
95
|
+
<div className="Versions-rollbackGroup-details">
|
96
|
+
{
|
97
|
+
_(@props.rollbackGroup).map (version)=>
|
98
|
+
<RevelryContent.VersionCard version={ version } />
|
99
|
+
}
|
100
|
+
</div>
|
101
|
+
</div>
|
102
|
+
|
103
|
+
RevelryContent.VersionHistory = React.createClass
|
104
|
+
getInitialState: ->
|
105
|
+
state =
|
106
|
+
versions: new RevelryContent.Models.Version.Collection()
|
107
|
+
done: false
|
108
|
+
|
109
|
+
getVersionGroups: ->
|
110
|
+
groups = []
|
111
|
+
currentDate = null
|
112
|
+
currentGroup = null
|
113
|
+
currentRollback = null
|
114
|
+
@state.versions.each (version)=>
|
115
|
+
unless moment(version.get('created_at')).isSame(currentDate, 'day')
|
116
|
+
if currentRollback
|
117
|
+
currentGroup.push currentRollback
|
118
|
+
groups.push([currentDate, currentGroup]) if currentGroup
|
119
|
+
currentDate = moment(version.get('created_at'))
|
120
|
+
currentGroup = []
|
121
|
+
if version.get('event').indexOf('rollback') > -1
|
122
|
+
currentRollback = [] unless currentRollback
|
123
|
+
currentRollback.push version
|
124
|
+
else
|
125
|
+
if currentRollback
|
126
|
+
currentGroup.push currentRollback
|
127
|
+
currentRollback = null
|
128
|
+
currentGroup.push version
|
129
|
+
|
130
|
+
if currentRollback
|
131
|
+
currentGroup.push currentRollback
|
132
|
+
currentRollback = null
|
133
|
+
|
134
|
+
if currentGroup && currentGroup.length > 0
|
135
|
+
groups.push([currentDate, currentGroup])
|
136
|
+
groups
|
137
|
+
|
138
|
+
render: ->
|
139
|
+
<div className="Versions EditablePages">
|
140
|
+
<h1>History</h1>
|
141
|
+
{
|
142
|
+
if @state.done
|
143
|
+
@getVersionGroups().map (group)=>
|
144
|
+
@renderDayGroup(group)
|
145
|
+
else
|
146
|
+
<RevelryContent.Loader />
|
147
|
+
}
|
148
|
+
</div>
|
149
|
+
|
150
|
+
renderDayGroup: (dayGroup)->
|
151
|
+
<div className="Versions-dayGroup">
|
152
|
+
<h5>
|
153
|
+
{ dayGroup[0].format('ddd M/D/YYYY') }
|
154
|
+
</h5>
|
155
|
+
<div className="Versions-dayGroup-details">
|
156
|
+
{
|
157
|
+
_(dayGroup[1]).map (rollbackGroupOrVersion)=>
|
158
|
+
if rollbackGroupOrVersion instanceof Array
|
159
|
+
<RevelryContent.RollbackGroup rollbackGroup={ rollbackGroupOrVersion } />
|
160
|
+
else
|
161
|
+
<RevelryContent.VersionCard version={ rollbackGroupOrVersion } />
|
162
|
+
}
|
163
|
+
</div>
|
164
|
+
</div>
|
165
|
+
|
166
|
+
componentDidMount: ->
|
167
|
+
@state.versions.once 'sync', =>
|
168
|
+
@setState done: true
|
169
|
+
@forceUpdate()
|
170
|
+
@state.versions.fetch()
|
@@ -0,0 +1,9 @@
|
|
1
|
+
RevelryContent.EditModeListener =
|
2
|
+
componentDidMount: ->
|
3
|
+
RevelryContent.dispatcher.on 'didChangeEditMode', @changedEditMode
|
4
|
+
|
5
|
+
componentWillUnmount: ->
|
6
|
+
RevelryContent.dispatcher.off 'didChangeEditMode', @changeEditMode
|
7
|
+
|
8
|
+
changedEditMode: ->
|
9
|
+
@forceUpdate()
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class RevelryContent.Models.Content extends Backbone.Model
|
2
|
+
url: ->
|
3
|
+
RevelryContent.base_path + '/contents'
|
4
|
+
|
5
|
+
class RevelryContent.Models.FileContent extends RevelryContent.Models.Content
|
6
|
+
sync: (method, model, options)->
|
7
|
+
formData = new FormData()
|
8
|
+
formData.append 'content[src]', model.get('src')
|
9
|
+
formData.append 'authenticity_token', RevelryContent.Utilities.getAuthenticityToken()
|
10
|
+
_(_(model.attributes).omit('src')).each (value, attr)=>
|
11
|
+
formData.append "content[#{ attr }]", value
|
12
|
+
options.data = formData
|
13
|
+
options.contentType = false
|
14
|
+
options.processData = false
|
15
|
+
options.cache = false
|
16
|
+
Backbone.sync(method, model, options)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class RevelryContent.Models.Version extends Backbone.Model
|
2
|
+
url: ->
|
3
|
+
RevelryContent.base_path + "/versions/#{ id }"
|
4
|
+
|
5
|
+
class RevelryContent.Models.Version.Collection extends Backbone.Collection
|
6
|
+
model: RevelryContent.Models.Version
|
7
|
+
url: ->
|
8
|
+
RevelryContent.base_path + "/versions/"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#= require ./utilities
|
2
|
+
#= require ./config
|
3
|
+
#= require underscore
|
4
|
+
#= require backbone
|
5
|
+
#= require_tree ./mixins
|
6
|
+
#= require_tree ./models
|
7
|
+
#= require_tree ./components
|
8
|
+
|
9
|
+
RevelryContent.dispatcher = new Backbone.Model()
|
10
|
+
RevelryContent.Utilities.exportLazyComponents()
|
@@ -0,0 +1,69 @@
|
|
1
|
+
if(typeof RevelryContent === 'undefined') {
|
2
|
+
var RevelryContent = {};
|
3
|
+
}
|
4
|
+
|
5
|
+
RevelryContent.Utilities = {};
|
6
|
+
RevelryContent.Models = {};
|
7
|
+
RevelryContent.lazyComponents = [];
|
8
|
+
|
9
|
+
RevelryContent.Utilities.lazyComponentDefinition = function(def) {
|
10
|
+
RevelryContent.lazyComponents.push(def);
|
11
|
+
}
|
12
|
+
|
13
|
+
RevelryContent.Utilities.exportLazyComponents = function() {
|
14
|
+
for(var i = 0; i < RevelryContent.lazyComponents.length; i++) {
|
15
|
+
RevelryContent.lazyComponents[i]();
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
RevelryContent.Utilities.ready = function (fn) {
|
20
|
+
if (document.readyState != 'loading'){
|
21
|
+
fn();
|
22
|
+
} else {
|
23
|
+
document.addEventListener('DOMContentLoaded', fn);
|
24
|
+
}
|
25
|
+
};
|
26
|
+
|
27
|
+
RevelryContent.Utilities.rev_script_loader = function(moduleIsLoaded, url, then) {
|
28
|
+
if(moduleIsLoaded) {
|
29
|
+
then();
|
30
|
+
return;
|
31
|
+
}
|
32
|
+
$.ajax({ url: url, dataType: 'script', success: then });
|
33
|
+
};
|
34
|
+
|
35
|
+
RevelryContent.Utilities.getAuthenticityToken = function() {
|
36
|
+
return $('meta[name="csrf-token"]').attr('content');
|
37
|
+
};
|
38
|
+
|
39
|
+
RevelryContent.Utilities.toObject = function (v) {
|
40
|
+
if (v === null || v === undefined) throw TypeError();
|
41
|
+
return Object(v);
|
42
|
+
}
|
43
|
+
|
44
|
+
RevelryContent.Utilities.ownPropertyKeys = function (o) {
|
45
|
+
return Object.getOwnPropertyNames(o);
|
46
|
+
}
|
47
|
+
|
48
|
+
if(typeof Object.assign === 'undefined') {
|
49
|
+
Object.assign = function(target, sources) {
|
50
|
+
var to = RevelryContent.Utilities.toObject(target);
|
51
|
+
if (arguments.length < 2) return to;
|
52
|
+
|
53
|
+
for (var sourcesIndex = 1; sourcesIndex < arguments.length; ++sourcesIndex) {
|
54
|
+
var nextSource = arguments[sourcesIndex];
|
55
|
+
if (nextSource === undefined || nextSource === null) continue;
|
56
|
+
var from = RevelryContent.Utilities.toObject(nextSource);
|
57
|
+
var keysArray = RevelryContent.Utilities.ownPropertyKeys(from);
|
58
|
+
for (var keysIndex = 0; keysIndex < keysArray.length; ++keysIndex) {
|
59
|
+
var nextKey = keysArray[keysIndex];
|
60
|
+
var desc = Object.getOwnPropertyDescriptor(from, nextKey);
|
61
|
+
if (desc !== undefined && desc.enumerable) {
|
62
|
+
var propValue = from[nextKey];
|
63
|
+
to[nextKey] = propValue;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
return to;
|
68
|
+
}
|
69
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
var RevelryContent = RevelryContent || {};
|
2
|
+
|
3
|
+
RevelryContent.load_react_ujs = function() {
|
4
|
+
// Unobtrusive scripting adapter for React
|
5
|
+
(function(document, window, React) {
|
6
|
+
var CLASS_NAME_ATTR = 'data-react-class';
|
7
|
+
var PROPS_ATTR = 'data-react-props';
|
8
|
+
|
9
|
+
// jQuery is optional. Use it to support legacy browsers.
|
10
|
+
var $ = (typeof jQuery !== 'undefined') && jQuery;
|
11
|
+
|
12
|
+
var findReactDOMNodes = function() {
|
13
|
+
var SELECTOR = '[' + CLASS_NAME_ATTR + ']';
|
14
|
+
return document.querySelectorAll(SELECTOR);
|
15
|
+
};
|
16
|
+
|
17
|
+
var mountReactComponents = function() {
|
18
|
+
var nodes = findReactDOMNodes();
|
19
|
+
for (var i = 0; i < nodes.length; ++i) {
|
20
|
+
var node = nodes[i];
|
21
|
+
var className = node.getAttribute(CLASS_NAME_ATTR);
|
22
|
+
// Assume className is simple and can be found at top-level (window).
|
23
|
+
// Fallback to eval to handle cases like 'My.React.ComponentName'.
|
24
|
+
var constructor = window[className] || eval.call(window, className);
|
25
|
+
var propsJson = node.getAttribute(PROPS_ATTR);
|
26
|
+
var props = propsJson && JSON.parse(propsJson);
|
27
|
+
React.render(React.createElement(constructor, props), node);
|
28
|
+
}
|
29
|
+
};
|
30
|
+
|
31
|
+
var unmountReactComponents = function() {
|
32
|
+
var nodes = findReactDOMNodes();
|
33
|
+
for (var i = 0; i < nodes.length; ++i) {
|
34
|
+
React.unmountComponentAtNode(nodes[i]);
|
35
|
+
}
|
36
|
+
};
|
37
|
+
|
38
|
+
var handleTurbolinksEvents = function() {
|
39
|
+
var handleEvent;
|
40
|
+
if ($) {
|
41
|
+
handleEvent = function(eventName, callback) {
|
42
|
+
$(document).on(eventName, callback);
|
43
|
+
}
|
44
|
+
} else {
|
45
|
+
handleEvent = function(eventName, callback) {
|
46
|
+
document.addEventListener(eventName, callback);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
handleEvent('page:change', mountReactComponents);
|
50
|
+
handleEvent('page:receive', unmountReactComponents);
|
51
|
+
};
|
52
|
+
|
53
|
+
var handleNativeEvents = function() {
|
54
|
+
window.addEventListener('unload', unmountReactComponents);
|
55
|
+
mountReactComponents()
|
56
|
+
};
|
57
|
+
|
58
|
+
if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
|
59
|
+
handleTurbolinksEvents();
|
60
|
+
} else {
|
61
|
+
handleNativeEvents();
|
62
|
+
}
|
63
|
+
})(document, window, React);
|
64
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*/
|
13
|
+
@import "revelry_content/reset";
|
14
|
+
@import "revelry_content/modules/base";
|
15
|
+
@import "revelry_content/layout";
|
16
|
+
@import "revelry_content/partials/iconStyle";
|
17
|
+
@import "revelry_content/components/buttons";
|
18
|
+
@import "revelry_content/components/editors";
|
19
|
+
@import "revelry_content/components/EditableList";
|
20
|
+
@import "revelry_content/components/loader";
|
21
|
+
@import "revelry_content/components/topBar";
|
22
|
+
@import "revelry_content/components/version";
|
@@ -0,0 +1,42 @@
|
|
1
|
+
.EditablePages {
|
2
|
+
margin: 0 auto;
|
3
|
+
max-width: 70rem;
|
4
|
+
& ul {
|
5
|
+
list-style: none;
|
6
|
+
margin: 0;
|
7
|
+
padding: 0;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
.EditablePage {
|
11
|
+
background: $alto;
|
12
|
+
border-radius: $global-radius;
|
13
|
+
color: $mine-shaft;
|
14
|
+
display: block;
|
15
|
+
margin: 0 0 $global-padding-small 0;
|
16
|
+
padding: $global-padding;
|
17
|
+
position: relative;
|
18
|
+
&:hover {
|
19
|
+
background: lighten($alto, 2%);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
ul.EditablePage-contents {
|
23
|
+
padding-left: $global-padding-large;
|
24
|
+
li {
|
25
|
+
margin: 0 0 $global-padding-small 0;
|
26
|
+
overflow: hidden;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
.EditablePage-element {
|
30
|
+
@extend .EditablePage;
|
31
|
+
margin: 0;
|
32
|
+
}
|
33
|
+
.Version-previewContainer {
|
34
|
+
img {
|
35
|
+
max-height: 8rem;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
.Version-previewContainer--text {
|
40
|
+
background: white;
|
41
|
+
padding: 1rem $base-line-height * 0.5;
|
42
|
+
}
|
@@ -0,0 +1,137 @@
|
|
1
|
+
a.RevelryContentLink {
|
2
|
+
color: $primary;
|
3
|
+
font-weight: bold;
|
4
|
+
text-decoration: none;
|
5
|
+
}
|
6
|
+
|
7
|
+
.IconLink {
|
8
|
+
font-size: $rev-content-base-size * 1.2;
|
9
|
+
font-weight: bold;
|
10
|
+
text-transform: uppercase;
|
11
|
+
}
|
12
|
+
|
13
|
+
.Button {
|
14
|
+
background: $button-background;
|
15
|
+
border: none;
|
16
|
+
border-radius: $global-radius;
|
17
|
+
color: $button-color;
|
18
|
+
display: inline-block;
|
19
|
+
font-size: $rev-content-base-size * 1.4;
|
20
|
+
font-weight: bold;
|
21
|
+
line-height: 1.25em;
|
22
|
+
outline: 0;
|
23
|
+
padding: $global-padding;
|
24
|
+
box-shadow: none;
|
25
|
+
text-decoration: none;
|
26
|
+
text-transform: uppercase;
|
27
|
+
&:hover {
|
28
|
+
background: lighten($button-background, 10%);
|
29
|
+
cursor: pointer;
|
30
|
+
}
|
31
|
+
&:active,
|
32
|
+
&:focus {
|
33
|
+
background: darken($button-background, 10%);
|
34
|
+
cursor: pointer;
|
35
|
+
}
|
36
|
+
&.isDisabled {
|
37
|
+
background: $alto;
|
38
|
+
color: $silver;
|
39
|
+
&:hover {
|
40
|
+
cursor: default;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
.Button-action {
|
45
|
+
background: $button-action-background;
|
46
|
+
color: $button-action-color;
|
47
|
+
&:hover {
|
48
|
+
background: lighten($button-action-background, 10%);
|
49
|
+
cursor: pointer;
|
50
|
+
}
|
51
|
+
&:active,
|
52
|
+
&:focus {
|
53
|
+
background: darken($button-action-background, 10%);
|
54
|
+
cursor: pointer;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
.Button-cancel {
|
58
|
+
background: $black;
|
59
|
+
color: $alto;
|
60
|
+
}
|
61
|
+
button.Button {
|
62
|
+
padding-bottom:.8rem;
|
63
|
+
}
|
64
|
+
.Button-small {
|
65
|
+
@extend .Button;
|
66
|
+
padding: $global-padding-small;
|
67
|
+
}
|
68
|
+
button.Button-small {
|
69
|
+
padding-bottom: .3rem;
|
70
|
+
}
|
71
|
+
.Button-large {
|
72
|
+
@extend .Button;
|
73
|
+
padding: $global-padding-large;
|
74
|
+
}
|
75
|
+
button.Button-large {
|
76
|
+
padding-bottom: 1.8rem;
|
77
|
+
}
|
78
|
+
|
79
|
+
.Rollback {
|
80
|
+
float: right;
|
81
|
+
background: transparent;
|
82
|
+
border: none;
|
83
|
+
border-radius: none;
|
84
|
+
color: $black;
|
85
|
+
font-size: $rev-content-base-size * 1.2;
|
86
|
+
font-weight: bold;
|
87
|
+
margin-bottom: $global-padding;
|
88
|
+
outline: 0;
|
89
|
+
position: relative;
|
90
|
+
box-shadow: none;
|
91
|
+
text-transform: uppercase;
|
92
|
+
&:hover,
|
93
|
+
&:active,
|
94
|
+
&:focus,
|
95
|
+
&.selected {
|
96
|
+
background: transparent;
|
97
|
+
color: $primary;
|
98
|
+
cursor: pointer;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
.ButtonBar {
|
103
|
+
margin-bottom: 1rem;
|
104
|
+
}
|
105
|
+
|
106
|
+
.EditModeButton {
|
107
|
+
@extend .Button;
|
108
|
+
position: fixed;
|
109
|
+
right: 1rem;
|
110
|
+
bottom: 1rem;
|
111
|
+
}
|
112
|
+
|
113
|
+
.EditorButton {
|
114
|
+
@extend .Button;
|
115
|
+
&:hover {
|
116
|
+
background: darken($button-background, 10%);
|
117
|
+
cursor: pointer;
|
118
|
+
}
|
119
|
+
margin-right: 4px;
|
120
|
+
}
|
121
|
+
|
122
|
+
.EditorButton--bold {
|
123
|
+
font-weight: bold;
|
124
|
+
}
|
125
|
+
|
126
|
+
.EditorButton--italic {
|
127
|
+
font-style: italic;
|
128
|
+
}
|
129
|
+
|
130
|
+
.EditorButton--underline {
|
131
|
+
text-decoration: underline;
|
132
|
+
}
|
133
|
+
|
134
|
+
.EditorButton--link {
|
135
|
+
text-decoration: underline;
|
136
|
+
color: $link;
|
137
|
+
}
|