diff --git a/.gitmodules b/.gitmodules index 24b7bc5..def50a2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "tinymce"] - path = tinymce + path = app/assets/javascripts/tinymce url = git@github.com:tinymce/tinymce-dist.git diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..292d124 --- /dev/null +++ b/Gemfile @@ -0,0 +1,15 @@ +source "https://rubygems.org" + +gemspec + +git "http://github.com/refinery/refinerycms", branch: "master" do + gem "refinerycms" + gem "refinerycms-testing" +end + +gem 'sqlite3' +gem 'pry' + +group :development, :test do + gem 'selenium-webdriver', '~> 2.43' +end diff --git a/Rakefile b/Rakefile new file mode 100755 index 0000000..23e3ce3 --- /dev/null +++ b/Rakefile @@ -0,0 +1,18 @@ +#!/usr/bin/env rake +begin + require 'bundler/setup' +rescue LoadError + puts 'You must `gem install bundler` and `bundle install` to run rake tasks' +end + +ENGINE_PATH = File.dirname(__FILE__) +APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__) + +if File.exists?(APP_RAKEFILE) + load 'rails/tasks/engine.rake' +end + +require "refinerycms-testing" +Refinery::Testing::Railtie.load_dummy_tasks(ENGINE_PATH) + +task :default => :spec diff --git a/app/assets/controllers/refinery/tinymce_controller.rb b/app/assets/controllers/refinery/tinymce_controller.rb new file mode 100644 index 0000000..ff1762d --- /dev/null +++ b/app/assets/controllers/refinery/tinymce_controller.rb @@ -0,0 +1,9 @@ +module Refinery + class TinymceController < ActionController::Base + + def tinymceiframe + render :template => "/refinery/tinymceiframe", :layout => false + end + + end +end diff --git a/app/assets/decorators/controllers/refinery/fast_controller_decorator.rb b/app/assets/decorators/controllers/refinery/fast_controller_decorator.rb new file mode 100644 index 0000000..092ffa4 --- /dev/null +++ b/app/assets/decorators/controllers/refinery/fast_controller_decorator.rb @@ -0,0 +1,5 @@ +Refinery::FastController.class_eval do + def tinymceiframe + render :template => "/refinery/tinymceiframe", :layout => false + end +end diff --git a/app/assets/javascripts/refinery/boot_tinymce.js.erb b/app/assets/javascripts/refinery/boot_tinymce.js.erb new file mode 100644 index 0000000..4582cfe --- /dev/null +++ b/app/assets/javascripts/refinery/boot_tinymce.js.erb @@ -0,0 +1,49 @@ +$(document).on('ready page:load', function(){ + + tinymce.init({ + selector: "textarea.visual_editor", + menubar : false, + plugins: ["image", "link"], + + file_browser_callback : function(field_name, url, type, win) { + + if (type == 'image') { + var title_text = "Choose an Image" + var cmsURL = '/refinery/dialogs/image'; + } else { + var title_text = "Choose Object to Link" + var cmsURL = '/refinery/dialogs/link'; + } + + tinymce.activeEditor.windowManager.open({ + file : cmsURL, + title : title_text, + width : 600, // Your dimensions may differ - toy around with them! + height : 600, + resizable : "yes", + inline : "yes", // This parameter only has an effect if you use the inlinepopups plugin! + close_previous : "yes" + }, { + window : win, + input : field_name + }); + } + }); + + $('#submit_button').on('click', function(event){ + var args = top.tinymce.activeEditor.windowManager.getParams(); + win = (args.window); + input = (args.input); + dialog_type = $('#visual_editor_dialog_type', window.parent.document).val(); + + if (dialog_type == 'link') { + selector = "#visual_editor_href"; + } else { + selector = "#visual_editor_src"; + } + win.document.getElementById(input).value = $(selector, window.parent.document).val(); + // window.alert( JSON.stringify(args) ); + top.tinymce.activeEditor.windowManager.close(); + }); + +}); diff --git a/app/assets/javascripts/refinery/tinymce.js b/app/assets/javascripts/refinery/tinymce.js new file mode 100644 index 0000000..eb2cb34 --- /dev/null +++ b/app/assets/javascripts/refinery/tinymce.js @@ -0,0 +1,14 @@ +/* + * TINYMCE + */ + +/* + Namespace: TINYMCE + Global Tinymce namespace. +*/ +/* + *= require tinymce/tinymce + *= require tinymce/tinymce.jquery + *= require refinery/boot_tinymce + *= require_self +*/ diff --git a/tinymce b/app/assets/javascripts/tinymce similarity index 100% rename from tinymce rename to app/assets/javascripts/tinymce diff --git a/app/assets/stylesheets/tinymce.css b/app/assets/stylesheets/tinymce.css new file mode 100644 index 0000000..4ecc69e --- /dev/null +++ b/app/assets/stylesheets/tinymce.css @@ -0,0 +1,4 @@ +#dialog_container, .dialog_container { + margin-left: 20px; +} + diff --git a/app/views/refinery/admin/dialogs/show.html.erb b/app/views/refinery/admin/dialogs/show.html.erb new file mode 100644 index 0000000..ce4a16e --- /dev/null +++ b/app/views/refinery/admin/dialogs/show.html.erb @@ -0,0 +1,16 @@ +
+ + +
+ <% if @dialog_type == "image" %> + + + + + <% elsif @dialog_type == "link" %> + + + + <% end %> +
+
diff --git a/app/views/refinery/tinymceiframe.html.erb b/app/views/refinery/tinymceiframe.html.erb new file mode 100644 index 0000000..ff26ff4 --- /dev/null +++ b/app/views/refinery/tinymceiframe.html.erb @@ -0,0 +1,13 @@ + + + + TinyMCE + + + <%#= stylesheet_link_tag "tinymce/skins/lightgray/skin.min", :media => "all" %> + <%= stylesheet_link_tag "formatting", :media => "all" if Rails.application.assets.find_asset('formatting.css') %> + <%= javascript_include_tag 'modernizr-min' %> + + "> + + diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..7af9135 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,3 @@ +Refinery::Core::Engine.routes.draw do + get 'tinymceiframe(/:id)', :to => 'fast#tinymceiframe', :as => :tinymceiframe +end diff --git a/lib/refinery/tinymce.rb b/lib/refinery/tinymce.rb new file mode 100644 index 0000000..a8802f3 --- /dev/null +++ b/lib/refinery/tinymce.rb @@ -0,0 +1,11 @@ +module Refinery + module Tinymce + require 'refinery/tinymce/engine' + + class << self + def root + @root ||= Pathname.new(File.expand_path('../../../', __FILE__)) + end + end + end +end diff --git a/lib/refinery/tinymce/engine.rb b/lib/refinery/tinymce/engine.rb new file mode 100644 index 0000000..1e9436b --- /dev/null +++ b/lib/refinery/tinymce/engine.rb @@ -0,0 +1,44 @@ +module Refinery + module Tinymce + class Engine < ::Rails::Engine + include Refinery::Engine + + isolate_namespace Refinery + engine_name :refinery_tinymce + + # set the manifests and assets to be precompiled + config.to_prepare do + Rails.application.config.assets.precompile += %w( + tinymce/themes/modern/theme.min.js + tinymce.css + tinymce/skins/lightgray/* + ) + end + + before_inclusion do + Refinery::Plugin.register do |plugin| + plugin.pathname = root + plugin.name = "refinerycms_tinymce" + plugin.hide_from_menu = true + plugin.menu_match = %r{refinery/tinymce} + end + end + + config.after_initialize do + Refinery.register_engine Refinery::Tinymce + end + + after_inclusion do + %w(tinymce/skins/lightgray/skin.min tinymce).each do |stylesheet| + Refinery::Core.config.register_visual_editor_stylesheet stylesheet + end + + %W(refinery/tinymce tinymce/themes/modern/theme.min).each do |javascript| + Refinery::Core.config.register_visual_editor_javascript javascript + end + + Refinery::Pages.config.friendly_id_reserved_words << 'tinymceiframe' + end + end + end +end diff --git a/lib/refinerycms-tinymce.rb b/lib/refinerycms-tinymce.rb new file mode 100644 index 0000000..580047c --- /dev/null +++ b/lib/refinerycms-tinymce.rb @@ -0,0 +1,2 @@ +require 'refinerycms-core' +require 'refinery/tinymce' diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..a8b3046 --- /dev/null +++ b/readme.md @@ -0,0 +1 @@ +# TinyMCE Visual Editing for RefineryCMS diff --git a/refinerycms-tinymce.gemspec b/refinerycms-tinymce.gemspec new file mode 100644 index 0000000..b9c374e --- /dev/null +++ b/refinerycms-tinymce.gemspec @@ -0,0 +1,18 @@ +# Encoding: UTF-8 +Gem::Specification.new do |s| + s.platform = Gem::Platform::RUBY + s.name = %q{refinerycms-tinymce} + s.version = '1.0.0' + s.summary = %q{TinyMCE support for Refinery CMS} + s.description = %q{This extension adds TinyMCE editor to Refinery CMS for visual editing.} + s.email = %q{ghoppe@gmail.com} + s.homepage = %q{http://refinerycms.com} + s.authors = ['Glenn Hoppe'] + s.license = %q{MIT} + s.require_paths = %w(lib) + + s.files = `git ls-files`.split("\n") + s.test_files = `git ls-files -- spec/*`.split("\n") + + s.add_dependency 'refinerycms-core', '~> 3.0', '>= 3.0.0' +end