comfortable_mexican_sofa 1.6.31 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +7 -2
- data/Gemfile +11 -2
- data/README.md +2 -3
- data/Rakefile +18 -0
- data/VERSION +1 -0
- data/app/assets/images/comfortable_mexican_sofa/bootstrap/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/bootstrap/glyphicons-halflings.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/{icon_regular.gif → icon_file.gif} +0 -0
- data/app/assets/images/comfortable_mexican_sofa/icon_page.gif +0 -0
- data/app/assets/images/comfortable_mexican_sofa/icon_site.gif +0 -0
- data/app/assets/javascripts/comfortable_mexican_sofa/application.js +61 -93
- data/app/assets/javascripts/comfortable_mexican_sofa/lib/bootstrap-datetimepicker.js +21 -0
- data/app/assets/javascripts/comfortable_mexican_sofa/lib/bootstrap-wysihtml5.js +492 -0
- data/app/assets/javascripts/comfortable_mexican_sofa/lib/bootstrap.js +6 -0
- data/app/assets/javascripts/comfortable_mexican_sofa/lib/codemirror.js +10 -0
- data/app/assets/javascripts/comfortable_mexican_sofa/lib/wysihtml5.js +261 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/application.css.sass +9 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/base.css.sass +328 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/base_overrides.css.sass +6 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/bootstrap_overrides.css.sass +43 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/codemirror_overrides.css.sass +27 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/lib/bootstrap-datetimepicker.css +9 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/lib/bootstrap-wysihtml5.css +102 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/lib/bootstrap.css +9 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/lib/codemirror.css +240 -0
- data/app/assets/stylesheets/comfortable_mexican_sofa/wysihtml5_overrides.css.sass +5 -0
- data/app/controllers/cms_admin/files_controller.rb +3 -3
- data/app/controllers/cms_admin/layouts_controller.rb +3 -3
- data/app/controllers/cms_admin/pages_controller.rb +3 -3
- data/app/controllers/cms_admin/revisions_controller.rb +1 -1
- data/app/controllers/cms_admin/sites_controller.rb +3 -3
- data/app/controllers/cms_admin/snippets_controller.rb +3 -3
- data/app/models/cms/file.rb +5 -3
- data/app/models/cms/page.rb +1 -14
- data/app/models/cms/site.rb +2 -2
- data/app/views/cms_admin/categories/_categories.html.haml +3 -0
- data/app/views/cms_admin/categories/_edit.html.haml +6 -0
- data/app/views/cms_admin/categories/_form.html.haml +8 -0
- data/app/views/cms_admin/categories/_index.html.haml +24 -0
- data/app/views/cms_admin/categories/_show.html.haml +13 -0
- data/app/views/cms_admin/categories/create.js.erb +3 -3
- data/app/views/cms_admin/categories/update.js.erb +1 -1
- data/app/views/cms_admin/files/_file.html.haml +14 -0
- data/app/views/cms_admin/files/_form.html.haml +13 -0
- data/app/views/cms_admin/files/_index.html.haml +12 -0
- data/app/views/cms_admin/files/_page_form.html.haml +9 -0
- data/app/views/cms_admin/files/create.js.erb +1 -1
- data/app/views/cms_admin/files/edit.html.haml +5 -0
- data/app/views/cms_admin/files/index.html.haml +26 -0
- data/app/views/cms_admin/files/new.html.haml +5 -0
- data/app/views/cms_admin/layouts/_form.html.haml +17 -0
- data/app/views/cms_admin/layouts/_index_branch.html.haml +23 -0
- data/app/views/cms_admin/layouts/edit.html.haml +9 -0
- data/app/views/cms_admin/layouts/index.html.haml +9 -0
- data/app/views/cms_admin/layouts/new.html.haml +5 -0
- data/app/views/cms_admin/pages/_form.html.haml +35 -0
- data/app/views/cms_admin/pages/_form_blocks.html.haml +28 -0
- data/app/views/cms_admin/pages/_index_branch.html.haml +35 -0
- data/app/views/cms_admin/pages/edit.html.haml +9 -0
- data/app/views/cms_admin/pages/form_blocks.js.erb +2 -3
- data/app/views/cms_admin/pages/index.html.haml +11 -0
- data/app/views/cms_admin/pages/new.html.haml +5 -0
- data/app/views/cms_admin/revisions/show.html.haml +28 -0
- data/app/views/cms_admin/sites/_form.html.haml +10 -0
- data/app/views/cms_admin/sites/_mirrors.html.haml +17 -0
- data/app/views/cms_admin/sites/edit.html.haml +5 -0
- data/app/views/cms_admin/sites/index.html.haml +24 -0
- data/app/views/cms_admin/sites/new.html.haml +5 -0
- data/app/views/cms_admin/snippets/_form.html.haml +11 -0
- data/app/views/cms_admin/snippets/edit.html.haml +9 -0
- data/app/views/cms_admin/snippets/index.html.haml +28 -0
- data/app/views/cms_admin/snippets/new.html.haml +5 -0
- data/app/views/layouts/cms_admin.html.haml +4 -0
- data/app/views/layouts/cms_admin/_body.html.haml +16 -0
- data/app/views/layouts/cms_admin/_center.html.haml +7 -0
- data/app/views/layouts/cms_admin/_head.html.haml +13 -0
- data/app/views/layouts/cms_admin/_left.html.haml +10 -0
- data/app/views/layouts/cms_admin/_right.html.haml +1 -0
- data/comfortable_mexican_sofa.gemspec +323 -21
- data/config/application.rb +22 -14
- data/config/environments/development.rb +16 -2
- data/config/environments/production.rb +22 -7
- data/config/environments/test.rb +6 -6
- data/config/initializers/comfortable_mexican_sofa.rb +1 -1
- data/db/migrate/01_create_cms.rb +1 -1
- data/doc/preview.png +0 -0
- data/lib/comfortable_mexican_sofa.rb +0 -5
- data/lib/comfortable_mexican_sofa/configuration.rb +1 -1
- data/lib/comfortable_mexican_sofa/engine.rb +8 -2
- data/lib/comfortable_mexican_sofa/extensions/rails.rb +2 -2
- data/lib/comfortable_mexican_sofa/form_builder.rb +27 -82
- data/lib/comfortable_mexican_sofa/tag.rb +1 -1
- data/lib/comfortable_mexican_sofa/tags/page_markdown.rb +22 -0
- data/lib/comfortable_mexican_sofa/version.rb +6 -2
- data/lib/comfortable_mexican_sofa/view_methods.rb +5 -8
- data/test/functional/cms_admin/files_controller_test.rb +4 -4
- data/test/functional/cms_admin/layouts_controller_test.rb +3 -3
- data/test/functional/cms_admin/pages_controller_test.rb +20 -12
- data/test/functional/cms_admin/revisions_controller_test.rb +3 -3
- data/test/functional/cms_admin/sites_controller_test.rb +3 -3
- data/test/functional/cms_admin/snippets_controller_test.rb +3 -3
- data/test/functional/cms_content_controller_test.rb +1 -1
- data/test/gemfiles/Gemfile.rails.3.1 +10 -4
- data/test/gemfiles/Gemfile.rails.3.2 +10 -4
- data/test/gemfiles/Gemfile.rails.4.0 +16 -0
- data/test/test_helper.rb +1 -16
- data/test/unit/configuration_test.rb +1 -3
- data/test/unit/models/page_test.rb +1 -19
- data/test/unit/models/site_test.rb +1 -5
- data/test/unit/tags/page_file_test.rb +6 -5
- data/test/unit/tags/page_files_test.rb +5 -3
- data/test/unit/tags/page_markdown_test.rb +48 -0
- metadata +195 -131
- checksums.yaml +0 -7
- data/.gitignore +0 -14
- data/app/assets/images/comfortable_mexican_sofa/elrte/elrte-toolbar.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/google-maps.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/iframe.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-director.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-flash.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-quicktime.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-realaudio.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-rutube.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-vimeo.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-winmedia.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/media-youtube.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/outline-div.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/outline-p.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/pagebreak.gif +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/pixel.gif +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/evilgrin.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/grin.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/happy.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/smile.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/surprised.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/tongue.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/unhappy.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/waii.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/elrte/smileys/wink.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-icons_888888_256x240.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/jquery_ui/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/images/comfortable_mexican_sofa/x.png +0 -0
- data/app/assets/javascripts/comfortable_mexican_sofa/codemirror/codemirror.js +0 -1
- data/app/assets/javascripts/comfortable_mexican_sofa/elrte/elrte.codemirror.js +0 -36
- data/app/assets/javascripts/comfortable_mexican_sofa/elrte/elrte.js +0 -267
- data/app/assets/javascripts/comfortable_mexican_sofa/elrte/elrte.sofa_image.js +0 -69
- data/app/assets/javascripts/comfortable_mexican_sofa/elrte/elrte.sofa_link.js +0 -58
- data/app/assets/javascripts/comfortable_mexican_sofa/jquery.js +0 -4
- data/app/assets/javascripts/comfortable_mexican_sofa/jquery_ui.js +0 -791
- data/app/assets/javascripts/comfortable_mexican_sofa/jquery_ui_timepicker.js +0 -12
- data/app/assets/javascripts/comfortable_mexican_sofa/rails.js +0 -315
- data/app/assets/stylesheets/comfortable_mexican_sofa/application.css +0 -13
- data/app/assets/stylesheets/comfortable_mexican_sofa/codemirror.css +0 -121
- data/app/assets/stylesheets/comfortable_mexican_sofa/content.css +0 -271
- data/app/assets/stylesheets/comfortable_mexican_sofa/dialogs.css +0 -45
- data/app/assets/stylesheets/comfortable_mexican_sofa/elrte.css +0 -173
- data/app/assets/stylesheets/comfortable_mexican_sofa/files.css +0 -82
- data/app/assets/stylesheets/comfortable_mexican_sofa/form.css +0 -232
- data/app/assets/stylesheets/comfortable_mexican_sofa/jquery_ui.css +0 -568
- data/app/assets/stylesheets/comfortable_mexican_sofa/reset.css +0 -1
- data/app/assets/stylesheets/comfortable_mexican_sofa/structure.css +0 -157
- data/app/assets/stylesheets/comfortable_mexican_sofa/typography.css +0 -39
- data/app/assets/stylesheets/comfortable_mexican_sofa/widgets.css +0 -29
- data/app/controllers/cms_admin/dialogs_controller.rb +0 -13
- data/app/views/cms_admin/categories/_categories.html.erb +0 -6
- data/app/views/cms_admin/categories/_edit.html.erb +0 -7
- data/app/views/cms_admin/categories/_form.html.erb +0 -12
- data/app/views/cms_admin/categories/_index.html.erb +0 -31
- data/app/views/cms_admin/categories/_show.html.erb +0 -16
- data/app/views/cms_admin/dialogs/image.html.erb +0 -7
- data/app/views/cms_admin/dialogs/link.html.erb +0 -5
- data/app/views/cms_admin/files/_file.html.erb +0 -18
- data/app/views/cms_admin/files/_form.html.erb +0 -16
- data/app/views/cms_admin/files/_index.html.erb +0 -16
- data/app/views/cms_admin/files/_page_form.html.erb +0 -12
- data/app/views/cms_admin/files/edit.html.erb +0 -5
- data/app/views/cms_admin/files/index.html.erb +0 -29
- data/app/views/cms_admin/files/new.html.erb +0 -5
- data/app/views/cms_admin/layouts/_form.html.erb +0 -20
- data/app/views/cms_admin/layouts/_index_branch.html.erb +0 -27
- data/app/views/cms_admin/layouts/edit.html.erb +0 -11
- data/app/views/cms_admin/layouts/index.html.erb +0 -10
- data/app/views/cms_admin/layouts/new.html.erb +0 -5
- data/app/views/cms_admin/pages/_form.html.erb +0 -39
- data/app/views/cms_admin/pages/_form_blocks.html.erb +0 -41
- data/app/views/cms_admin/pages/_index_branch.html.erb +0 -43
- data/app/views/cms_admin/pages/edit.html.erb +0 -11
- data/app/views/cms_admin/pages/index.html.erb +0 -12
- data/app/views/cms_admin/pages/new.html.erb +0 -5
- data/app/views/cms_admin/revisions/show.html.erb +0 -36
- data/app/views/cms_admin/sites/_form.html.erb +0 -10
- data/app/views/cms_admin/sites/_mirrors.html.erb +0 -20
- data/app/views/cms_admin/sites/edit.html.erb +0 -5
- data/app/views/cms_admin/sites/index.html.erb +0 -23
- data/app/views/cms_admin/sites/new.html.erb +0 -5
- data/app/views/cms_admin/snippets/_form.html.erb +0 -13
- data/app/views/cms_admin/snippets/edit.html.erb +0 -10
- data/app/views/cms_admin/snippets/index.html.erb +0 -33
- data/app/views/cms_admin/snippets/new.html.erb +0 -5
- data/app/views/layouts/cms_admin.html.erb +0 -5
- data/app/views/layouts/cms_admin/_body.html.erb +0 -23
- data/app/views/layouts/cms_admin/_center.html.erb +0 -6
- data/app/views/layouts/cms_admin/_head.html.erb +0 -43
- data/app/views/layouts/cms_admin/_left.html.erb +0 -10
- data/app/views/layouts/cms_admin/_right.html.erb +0 -1
- data/test/functional/cms_admin/dialogs_controller_test.rb +0 -24
- data/test/gemfiles/Gemfile.rails.3.0 +0 -10
- data/test/unit/form_builder_test.rb +0 -69
data/.travis.yml
CHANGED
@@ -1,17 +1,22 @@
|
|
1
|
+
language: ruby
|
1
2
|
before_install:
|
2
3
|
- gem update --system
|
3
4
|
- gem --version
|
5
|
+
- gem install bundler
|
4
6
|
rvm:
|
5
7
|
- 1.9.2
|
6
8
|
- 1.9.3
|
9
|
+
- 2.0.0
|
7
10
|
gemfile:
|
8
|
-
- test/gemfiles/Gemfile.rails.3.0
|
9
11
|
- test/gemfiles/Gemfile.rails.3.1
|
10
12
|
- test/gemfiles/Gemfile.rails.3.2
|
13
|
+
- test/gemfiles/Gemfile.rails.4.0
|
11
14
|
notifications:
|
12
15
|
recipients:
|
13
16
|
- oleg@khabarov.ca
|
14
17
|
branches:
|
15
18
|
only:
|
16
19
|
- master
|
17
|
-
|
20
|
+
matrix:
|
21
|
+
allow_failures:
|
22
|
+
- gemfile: test/gemfiles/Gemfile.rails.4.0
|
data/Gemfile
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
|
-
|
3
|
+
gem 'rails', '>= 3.1.0'
|
4
|
+
gem 'formatted_form', '>= 2.1.0'
|
5
|
+
gem 'active_link_to', '>= 1.0.0'
|
6
|
+
gem 'paperclip', '>= 3.4.0'
|
7
|
+
gem 'redcarpet', '>= 2.2.0'
|
8
|
+
gem 'jquery-rails', '>= 2.2.0'
|
9
|
+
gem 'haml-rails', '>= 0.3.0'
|
10
|
+
gem 'sass-rails', '>= 3.1.0'
|
11
|
+
gem 'coffee-rails', '>= 3.1.0'
|
4
12
|
|
5
13
|
group :test do
|
6
14
|
gem 'sqlite3'
|
7
|
-
|
15
|
+
gem 'jeweler'
|
16
|
+
end
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ ComfortableMexicanSofa is a powerful CMS Engine for your Rails 3 applications.
|
|
5
5
|
|
6
6
|
Features
|
7
7
|
--------
|
8
|
-
* Simple integration with Rails 3 apps
|
8
|
+
* Simple integration with Rails 3 apps. Supports Rails 3.1, 3.2 running Ruby 1.9.2, 1.9.3 or 2.0.0
|
9
9
|
* Build your application in Rails, not in CMS
|
10
10
|
* Powerful page templating capability using [Tags](https://github.com/comfy/comfortable-mexican-sofa/wiki/Tags)
|
11
11
|
* [Multiple Sites](https://github.com/comfy/comfortable-mexican-sofa/wiki/Sites) from a single installation
|
@@ -13,7 +13,6 @@ Features
|
|
13
13
|
* [Fixtures](https://github.com/comfy/comfortable-mexican-sofa/wiki/Working-with-CMS-fixtures) for initial content population
|
14
14
|
* [Revision History](https://github.com/comfy/comfortable-mexican-sofa/wiki/Revisions)
|
15
15
|
* [Great reusable admin interface](https://github.com/comfy/comfortable-mexican-sofa/wiki/Reusing-sofa%27s-admin-area)
|
16
|
-
* Almost no 3rd party library dependencies
|
17
16
|
|
18
17
|
Installation
|
19
18
|
------------
|
@@ -56,4 +55,4 @@ For more information please [see Wiki pages](https://github.com/comfy/comfortabl
|
|
56
55
|
|
57
56
|
ComfortableMexicanSofa is released under the [MIT license](https://github.com/comfy/comfortable-mexican-sofa/raw/master/LICENSE)
|
58
57
|
|
59
|
-
Copyright 2009-
|
58
|
+
Copyright 2009-2013 Oleg Khabarov, [The Working Group Inc](http://www.twg.ca)
|
data/Rakefile
CHANGED
@@ -1,5 +1,23 @@
|
|
1
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
|
+
|
1
4
|
require File.expand_path('../config/application', __FILE__)
|
2
5
|
require 'rubygems'
|
3
6
|
require 'rake'
|
4
7
|
|
5
8
|
ComfortableMexicanSofa::Application.load_tasks
|
9
|
+
|
10
|
+
begin
|
11
|
+
require 'jeweler'
|
12
|
+
Jeweler::Tasks.new do |gem|
|
13
|
+
gem.name = 'comfortable_mexican_sofa'
|
14
|
+
gem.summary = 'ComfortableMexicanSofa is a powerful CMS Engine for Ruby on Rails 3 applications'
|
15
|
+
gem.description = ''
|
16
|
+
gem.email = 'oleg@theworkinggroup.ca'
|
17
|
+
gem.homepage = 'http://github.com/comfy/comfortable-mexican-sofa'
|
18
|
+
gem.authors = ['Oleg Khabarov', 'The Working Group Inc']
|
19
|
+
end
|
20
|
+
Jeweler::GemcutterTasks.new
|
21
|
+
rescue LoadError
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
23
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.7.0
|
Binary file
|
Binary file
|
File without changes
|
Binary file
|
Binary file
|
@@ -1,12 +1,11 @@
|
|
1
|
-
//= require
|
2
|
-
//= require
|
3
|
-
//= require
|
4
|
-
//= require comfortable_mexican_sofa/
|
5
|
-
//= require comfortable_mexican_sofa/
|
6
|
-
//= require comfortable_mexican_sofa/
|
7
|
-
//= require comfortable_mexican_sofa/
|
8
|
-
//= require comfortable_mexican_sofa/
|
9
|
-
//= require comfortable_mexican_sofa/elrte/elrte.sofa_image.js
|
1
|
+
//= require jquery
|
2
|
+
//= require jquery_ujs
|
3
|
+
//= require jquery-ui
|
4
|
+
//= require comfortable_mexican_sofa/lib/bootstrap
|
5
|
+
//= require comfortable_mexican_sofa/lib/codemirror
|
6
|
+
//= require comfortable_mexican_sofa/lib/wysihtml5
|
7
|
+
//= require comfortable_mexican_sofa/lib/bootstrap-wysihtml5
|
8
|
+
//= require comfortable_mexican_sofa/lib/bootstrap-datetimepicker
|
10
9
|
|
11
10
|
$.CMS = function(){
|
12
11
|
|
@@ -23,22 +22,13 @@ $.CMS = function(){
|
|
23
22
|
$.CMS.enable_sortable_list();
|
24
23
|
if($('#page_new, #page_edit, #new_page, #edit_page').length) $.CMS.enable_page_form();
|
25
24
|
if($('#mirrors').length) $.CMS.enable_mirrors_widget();
|
26
|
-
if($('#
|
27
|
-
if($('
|
28
|
-
if($('.
|
25
|
+
if($('#form-save').length) $.CMS.enable_form_save_widget();
|
26
|
+
if($('.file-uploader').length) $.CMS.enable_uploader();
|
27
|
+
if($('.categories-widget').length) $.CMS.enable_categories_widget();
|
29
28
|
});
|
30
29
|
|
31
30
|
return {
|
32
|
-
|
33
|
-
// Configuration that can be overriden from the outside. For example:
|
34
|
-
// $.CMS.config.elRTE.toolbar = ['undoredo']
|
35
|
-
config: {
|
36
|
-
'elRTE': {
|
37
|
-
toolbar: ['undoredo', 'sofa_format', 'sofa_style', 'sofa_alignment', 'lists', 'sofa_copypaste', 'sofa_image', 'sofa_links'],
|
38
|
-
cssfiles: []
|
39
|
-
}
|
40
|
-
},
|
41
|
-
|
31
|
+
|
42
32
|
enable_sortable_list: function(){
|
43
33
|
$('.sortable, ul.sortable ul').sortable({
|
44
34
|
handle: '.dragger',
|
@@ -50,24 +40,21 @@ $.CMS = function(){
|
|
50
40
|
},
|
51
41
|
|
52
42
|
slugify: function(){
|
53
|
-
$('input
|
54
|
-
|
55
|
-
var delimiter = slug_input.hasClass('delimiter-underscore') ? '_' : '-';
|
56
|
-
slug_input.val( slugify( $(this).val(), delimiter ) );
|
43
|
+
$('input[data-slugify=true]').bind('keyup.cms', function() {
|
44
|
+
$('input[data-slug=true]').val(slugify($(this).val()));
|
57
45
|
});
|
58
46
|
|
59
|
-
function slugify(str
|
60
|
-
var opposite_delimiter = (delimiter == '-') ? '_' : '-';
|
47
|
+
function slugify(str){
|
61
48
|
str = str.replace(/^\s+|\s+$/g, '');
|
62
49
|
var from = "ÀÁÄÂÃÈÉËÊÌÍÏÎÒÓÖÔÕÙÚÜÛàáäâãèéëêìíïîòóöôõùúüûÑñÇç";
|
63
50
|
var to = "aaaaaeeeeiiiiooooouuuuaaaaaeeeeiiiiooooouuuunncc";
|
64
|
-
for (var i=0, l=from.length
|
51
|
+
for (var i = 0, l = from.length; i < l; i++){
|
65
52
|
str = str.replace(new RegExp(from[i], "g"), to[i]);
|
66
53
|
}
|
67
|
-
var chars_to_replace_with_delimiter = new RegExp('[·/,:;
|
68
|
-
str = str.replace(chars_to_replace_with_delimiter,
|
69
|
-
var chars_to_remove = new RegExp('[^a-zA-Z0-9
|
70
|
-
str = str.replace(chars_to_remove, '').replace(/\s+/g,
|
54
|
+
var chars_to_replace_with_delimiter = new RegExp('[·/,:;_]', 'g');
|
55
|
+
str = str.replace(chars_to_replace_with_delimiter, '-');
|
56
|
+
var chars_to_remove = new RegExp('[^a-zA-Z0-9 -]', 'g');
|
57
|
+
str = str.replace(chars_to_remove, '').replace(/\s+/g, '-').toLowerCase();
|
71
58
|
return str;
|
72
59
|
}
|
73
60
|
},
|
@@ -89,48 +76,37 @@ $.CMS = function(){
|
|
89
76
|
},
|
90
77
|
|
91
78
|
enable_rich_text: function(){
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
elRTE.prototype.options.toolbars.sofa = $.CMS.config.elRTE.toolbar;
|
99
|
-
elRTE.prototype.options.cssfiles = $.CMS.config.elRTE.cssfiles;
|
100
|
-
|
101
|
-
// BUG: Need to set content to an empty <p> for IE
|
102
|
-
if ($.browser.msie){
|
103
|
-
$('textarea.rich_text').each(function(){
|
104
|
-
if ($(this).val() == ''){
|
105
|
-
$(this).val('<p></p>');
|
106
|
-
}
|
107
|
-
})
|
108
|
-
}
|
109
|
-
|
110
|
-
$('textarea.rich_text').elrte({
|
111
|
-
height: 300,
|
112
|
-
toolbar: 'sofa',
|
113
|
-
styleWithCSS: false
|
79
|
+
$('textarea[data-rich-text]').each(function(i, element){
|
80
|
+
$(element).wysihtml5({
|
81
|
+
'html': true,
|
82
|
+
'color': false,
|
83
|
+
'stylesheets': []
|
84
|
+
});
|
114
85
|
});
|
115
86
|
},
|
116
87
|
|
117
88
|
enable_codemirror: function(){
|
118
|
-
$('textarea
|
119
|
-
var mode = 'htmlmixed';
|
120
|
-
if ($(element).hasClass('css')) mode = 'css';
|
121
|
-
if ($(element).hasClass('js')) mode = 'javascript';
|
89
|
+
$('textarea[data-cm-mode]').each(function(i, element){
|
122
90
|
CodeMirror.fromTextArea(element, {
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
91
|
+
mode: $(element).data('cm-mode'),
|
92
|
+
lineWrapping: true,
|
93
|
+
autoCloseTags: true,
|
94
|
+
lineNumbers: true
|
127
95
|
});
|
128
96
|
});
|
129
97
|
},
|
130
98
|
|
131
99
|
enable_date_picker: function(){
|
132
|
-
$('input[type=text]
|
133
|
-
|
100
|
+
$('input[type=text][data-datetime]').datetimepicker({
|
101
|
+
format: 'yyyy-mm-dd hh:ii',
|
102
|
+
minView: 'day',
|
103
|
+
autoclose: true
|
104
|
+
});
|
105
|
+
$('input[type=text][data-date]').datetimepicker({
|
106
|
+
format: 'yyyy-mm-dd',
|
107
|
+
minView: 'minute',
|
108
|
+
autoclose: true
|
109
|
+
});
|
134
110
|
},
|
135
111
|
|
136
112
|
tree_methods: function(){
|
@@ -158,23 +134,23 @@ $.CMS = function(){
|
|
158
134
|
})
|
159
135
|
},
|
160
136
|
|
161
|
-
|
162
|
-
|
163
|
-
$('
|
137
|
+
enable_form_save_widget : function(){
|
138
|
+
var widget = $('#form-save');
|
139
|
+
$('input', widget).prop('checked', $('input#page_is_published').is(':checked'));
|
140
|
+
$('button', widget).html($('input[name=commit]').val());
|
164
141
|
|
165
|
-
$('
|
166
|
-
$('input#page_is_published').
|
167
|
-
})
|
168
|
-
$('input#page_is_published').
|
169
|
-
$('
|
170
|
-
})
|
171
|
-
$('
|
172
|
-
$('input
|
173
|
-
})
|
142
|
+
$('input', widget).click(function(){
|
143
|
+
$('input#page_is_published').prop('checked', $(this).is(':checked'));
|
144
|
+
});
|
145
|
+
$('input#page_is_published').click(function(){
|
146
|
+
$('input', widget).prop('checked', $(this).is(':checked'));
|
147
|
+
});
|
148
|
+
$('button', widget).click(function(){
|
149
|
+
$('input[name=commit]').click();
|
150
|
+
});
|
174
151
|
},
|
175
152
|
|
176
153
|
enable_page_form : function(){
|
177
|
-
$('#tag_namespaces').tabs();
|
178
154
|
$('input[name=commit]').click(function() {
|
179
155
|
$(this).parents('form').attr('target', '');
|
180
156
|
});
|
@@ -184,8 +160,8 @@ $.CMS = function(){
|
|
184
160
|
},
|
185
161
|
|
186
162
|
enable_uploader : function(){
|
187
|
-
var action = $('.
|
188
|
-
$('.
|
163
|
+
var action = $('.file-uploader form').attr('action');
|
164
|
+
$('.file-uploader input[type=file]').change(function(){
|
189
165
|
var files = $($(this).get(0).files);
|
190
166
|
files.each(function(i, file){
|
191
167
|
var xhr = new XMLHttpRequest();
|
@@ -194,7 +170,6 @@ $.CMS = function(){
|
|
194
170
|
eval(xhr.responseText);
|
195
171
|
}
|
196
172
|
}
|
197
|
-
|
198
173
|
xhr.open('POST', action, true);
|
199
174
|
xhr.setRequestHeader('Accept', 'application/javascript');
|
200
175
|
xhr.setRequestHeader('X-CSRF-Token', $('meta[name=csrf-token]').attr('content'));
|
@@ -207,18 +182,11 @@ $.CMS = function(){
|
|
207
182
|
},
|
208
183
|
|
209
184
|
enable_categories_widget : function(){
|
210
|
-
$('.
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
$('a.action_link.done').show();
|
216
|
-
} else {
|
217
|
-
$('.categories.editable').hide();
|
218
|
-
$('.categories.read').show();
|
219
|
-
$(this).hide();
|
220
|
-
$('a.action_link.edit').show();
|
221
|
-
}
|
185
|
+
$('a', '.categories-widget .action-links').click(function(){
|
186
|
+
$('.categories.read', '.categories-widget').toggle();
|
187
|
+
$('.categories.editable', '.categories-widget').toggle();
|
188
|
+
$('.edit', '.categories-widget').toggle();
|
189
|
+
$('.done', '.categories-widget').toggle();
|
222
190
|
return false;
|
223
191
|
});
|
224
192
|
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* =========================================================
|
2
|
+
* bootstrap-datetimepicker.js
|
3
|
+
* =========================================================
|
4
|
+
* Copyright 2012 Stefan Petre
|
5
|
+
* Improvements by Andrew Rowls
|
6
|
+
* Improvements by Sébastien Malot
|
7
|
+
* Project URL : http://www.malot.fr/bootstrap-datetimepicker
|
8
|
+
*
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
10
|
+
* you may not use this file except in compliance with the License.
|
11
|
+
* You may obtain a copy of the License at
|
12
|
+
*
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
14
|
+
*
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
18
|
+
* See the License for the specific language governing permissions and
|
19
|
+
* limitations under the License.
|
20
|
+
* ========================================================= */
|
21
|
+
!function(e){function t(){return new Date(Date.UTC.apply(Date,arguments))}function n(){var e=new Date;return t(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds())}var r=function(t,n){var r=this;this.element=e(t);this.language=n.language||this.element.data("date-language")||"en";this.language=this.language in i?this.language:"en";this.isRTL=i[this.language].rtl||false;this.formatType=n.formatType||this.element.data("format-type")||"standard";this.format=s.parseFormat(n.format||this.element.data("date-format")||s.getDefaultFormat(this.formatType,"input"),this.formatType);this.isInline=false;this.isInput=this.element.is("input");this.component=this.element.is(".date")?this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar").parent():false;this.componentReset=this.element.is(".date")?this.element.find(".add-on .icon-remove").parent():false;this.hasInput=this.component&&this.element.find("input").length;if(this.component&&this.component.length===0){this.component=false}this.linkField=n.linkField||this.element.data("link-field")||false;this.linkFormat=s.parseFormat(n.linkFormat||this.element.data("link-format")||s.getDefaultFormat(this.formatType,"link"),this.formatType);this.minuteStep=n.minuteStep||this.element.data("minute-step")||5;this.pickerPosition=n.pickerPosition||this.element.data("picker-position")||"bottom-right";this._attachEvents();this.minView=0;if("minView"in n){this.minView=n.minView}else if("minView"in this.element.data()){this.minView=this.element.data("min-view")}this.minView=s.convertViewMode(this.minView);this.maxView=s.modes.length-1;if("maxView"in n){this.maxView=n.maxView}else if("maxView"in this.element.data()){this.maxView=this.element.data("max-view")}this.maxView=s.convertViewMode(this.maxView);this.startViewMode=2;if("startView"in n){this.startViewMode=n.startView}else if("startView"in this.element.data()){this.startViewMode=this.element.data("start-view")}this.startViewMode=s.convertViewMode(this.startViewMode);this.viewMode=this.startViewMode;this.forceParse=true;if("forceParse"in n){this.forceParse=n.forceParse}else if("dateForceParse"in this.element.data()){this.forceParse=this.element.data("date-force-parse")}this.picker=e(s.template).appendTo(this.isInline?this.element:"body").on({click:e.proxy(this.click,this),mousedown:e.proxy(this.mousedown,this)});if(this.isInline){this.picker.addClass("datetimepicker-inline")}else{if(this.component&&this.pickerPosition=="bottom-left"){this.picker.addClass("datetimepicker-dropdown-left dropdown-menu")}else{this.picker.addClass("datetimepicker-dropdown dropdown-menu")}}if(this.isRTL){this.picker.addClass("datetimepicker-rtl");this.picker.find(".prev i, .next i").toggleClass("icon-arrow-left icon-arrow-right")}e(document).on("mousedown",function(t){if(e(t.target).closest(".datetimepicker").length===0){r.hide()}});this.autoclose=false;if("autoclose"in n){this.autoclose=n.autoclose}else if("dateAutoclose"in this.element.data()){this.autoclose=this.element.data("date-autoclose")}this.keyboardNavigation=true;if("keyboardNavigation"in n){this.keyboardNavigation=n.keyboardNavigation}else if("dateKeyboardNavigation"in this.element.data()){this.keyboardNavigation=this.element.data("date-keyboard-navigation")}this.todayBtn=n.todayBtn||this.element.data("date-today-btn")||false;this.todayHighlight=n.todayHighlight||this.element.data("date-today-highlight")||false;this.weekStart=(n.weekStart||this.element.data("date-weekstart")||i[this.language].weekStart||0)%7;this.weekEnd=(this.weekStart+6)%7;this.startDate=-Infinity;this.endDate=Infinity;this.daysOfWeekDisabled=[];this.setStartDate(n.startDate||this.element.data("date-startdate"));this.setEndDate(n.endDate||this.element.data("date-enddate"));this.setDaysOfWeekDisabled(n.daysOfWeekDisabled||this.element.data("date-days-of-week-disabled"));this.fillDow();this.fillMonths();this.update();this.showMode();if(this.isInline){this.show()}};r.prototype={constructor:r,_events:[],_attachEvents:function(){this._detachEvents();if(this.isInput){this._events=[[this.element,{focus:e.proxy(this.show,this),keyup:e.proxy(this.update,this),keydown:e.proxy(this.keydown,this)}]]}else if(this.component&&this.hasInput){this._events=[[this.element.find("input"),{focus:e.proxy(this.show,this),keyup:e.proxy(this.update,this),keydown:e.proxy(this.keydown,this)}],[this.component,{click:e.proxy(this.show,this)}]];if(this.componentReset){this._events.push([this.componentReset,{click:e.proxy(this.reset,this)}])}}else if(this.element.is("div")){this.isInline=true}else{this._events=[[this.element,{click:e.proxy(this.show,this)}]]}for(var t=0,n,r;t<this._events.length;t++){n=this._events[t][0];r=this._events[t][1];n.on(r)}},_detachEvents:function(){for(var e=0,t,n;e<this._events.length;e++){t=this._events[e][0];n=this._events[e][1];t.off(n)}this._events=[]},show:function(t){this.picker.show();this.height=this.component?this.component.outerHeight():this.element.outerHeight();if(this.forceParse){this.update()}this.place();e(window).on("resize",e.proxy(this.place,this));if(t){t.stopPropagation();t.preventDefault()}this.element.trigger({type:"show",date:this.date})},hide:function(t){if(this.isInline)return;this.picker.hide();e(window).off("resize",this.place);this.viewMode=this.startViewMode;this.showMode();if(!this.isInput){e(document).off("mousedown",this.hide)}if(this.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val()))this.setValue();this.element.trigger({type:"hide",date:this.date})},remove:function(){this._detachEvents();this.picker.remove();delete this.element.data().datetimepicker},getDate:function(){var e=this.getUTCDate();return new Date(e.getTime()+e.getTimezoneOffset()*6e4)},getUTCDate:function(){return this.date},setDate:function(e){this.setUTCDate(new Date(e.getTime()-e.getTimezoneOffset()*6e4))},setUTCDate:function(e){if(e>=this.startDate&&e<=this.endDate){this.date=e;this.setValue();this.viewDate=this.date;this.fill()}else{this.element.trigger({type:"outOfRange",date:e,startDate:this.startDate,endDate:this.endDate})}},setValue:function(){var t=this.getFormattedDate();if(!this.isInput){if(this.component){this.element.find("input").prop("value",t)}this.element.data("date",t)}else{this.element.prop("value",t)}if(this.linkField){e("#"+this.linkField).val(this.getFormattedDate(this.linkFormat))}},getFormattedDate:function(e){if(e==undefined)e=this.format;return s.formatDate(this.date,e,this.language,this.formatType)},setStartDate:function(e){this.startDate=e||-Infinity;if(this.startDate!==-Infinity){this.startDate=s.parseDate(this.startDate,this.format,this.language,this.formatType)}this.update();this.updateNavArrows()},setEndDate:function(e){this.endDate=e||Infinity;if(this.endDate!==Infinity){this.endDate=s.parseDate(this.endDate,this.format,this.language,this.formatType)}this.update();this.updateNavArrows()},setDaysOfWeekDisabled:function(t){this.daysOfWeekDisabled=t||[];if(!e.isArray(this.daysOfWeekDisabled)){this.daysOfWeekDisabled=this.daysOfWeekDisabled.split(/,\s*/)}this.daysOfWeekDisabled=e.map(this.daysOfWeekDisabled,function(e){return parseInt(e,10)});this.update();this.updateNavArrows()},place:function(){if(this.isInline)return;var t=parseInt(this.element.parents().filter(function(){return e(this).css("z-index")!="auto"}).first().css("z-index"))+10;var n,r;if(this.component){n=this.component.offset();r=n.left;if(this.pickerPosition=="bottom-left"){r+=this.component.outerWidth()-this.picker.outerWidth()}}else{n=this.element.offset();r=n.left}this.picker.css({top:n.top+this.height,left:r,zIndex:t})},update:function(){var e,t=false;if(arguments&&arguments.length&&(typeof arguments[0]==="string"||arguments[0]instanceof Date)){e=arguments[0];t=true}else{e=this.isInput?this.element.prop("value"):this.element.data("date")||this.element.find("input").prop("value")||new Date}if(!e){e=new Date;t=false}this.date=s.parseDate(e,this.format,this.language,this.formatType);if(t)this.setValue();if(this.date<this.startDate){this.viewDate=new Date(this.startDate)}else if(this.date>this.endDate){this.viewDate=new Date(this.endDate)}else{this.viewDate=new Date(this.date)}this.fill()},fillDow:function(){var e=this.weekStart,t="<tr>";while(e<this.weekStart+7){t+='<th class="dow">'+i[this.language].daysMin[e++%7]+"</th>"}t+="</tr>";this.picker.find(".datetimepicker-days thead").append(t)},fillMonths:function(){var e="",t=0;while(t<12){e+='<span class="month">'+i[this.language].monthsShort[t++]+"</span>"}this.picker.find(".datetimepicker-months td").html(e)},fill:function(){if(this.date==null||this.viewDate==null){return}var n=new Date(this.viewDate),r=n.getUTCFullYear(),o=n.getUTCMonth(),u=n.getUTCDate(),a=n.getUTCHours(),f=n.getUTCMinutes(),l=this.startDate!==-Infinity?this.startDate.getUTCFullYear():-Infinity,c=this.startDate!==-Infinity?this.startDate.getUTCMonth():-Infinity,h=this.endDate!==Infinity?this.endDate.getUTCFullYear():Infinity,p=this.endDate!==Infinity?this.endDate.getUTCMonth():Infinity,d=(new t(this.date.getUTCFullYear(),this.date.getUTCMonth(),this.date.getUTCDate())).valueOf(),v=new Date;this.picker.find(".datetimepicker-days thead th:eq(1)").text(i[this.language].months[o]+" "+r);this.picker.find(".datetimepicker-hours thead th:eq(1)").text(u+" "+i[this.language].months[o]+" "+r);this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(u+" "+i[this.language].months[o]+" "+r);this.picker.find("tfoot th.today").text(i[this.language].today).toggle(this.todayBtn!==false);this.updateNavArrows();this.fillMonths();var m=t(r,o-1,28,0,0,0,0),g=s.getDaysInMonth(m.getUTCFullYear(),m.getUTCMonth());m.setUTCDate(g);m.setUTCDate(g-(m.getUTCDay()-this.weekStart+7)%7);var y=new Date(m);y.setUTCDate(y.getUTCDate()+42);y=y.valueOf();var b=[];var w;while(m.valueOf()<y){if(m.getUTCDay()==this.weekStart){b.push("<tr>")}w="";if(m.getUTCFullYear()<r||m.getUTCFullYear()==r&&m.getUTCMonth()<o){w+=" old"}else if(m.getUTCFullYear()>r||m.getUTCFullYear()==r&&m.getUTCMonth()>o){w+=" new"}if(this.todayHighlight&&m.getUTCFullYear()==v.getFullYear()&&m.getUTCMonth()==v.getMonth()&&m.getUTCDate()==v.getDate()){w+=" today"}if(m.valueOf()==d){w+=" active"}if(m.valueOf()+864e5<this.startDate||m.valueOf()>this.endDate||e.inArray(m.getUTCDay(),this.daysOfWeekDisabled)!==-1){w+=" disabled"}b.push('<td class="day'+w+'">'+m.getUTCDate()+"</td>");if(m.getUTCDay()==this.weekEnd){b.push("</tr>")}m.setUTCDate(m.getUTCDate()+1)}this.picker.find(".datetimepicker-days tbody").empty().append(b.join(""));b=[];for(var E=0;E<24;E++){var S=t(r,o,u,E);w="";if(S.valueOf()+36e5<this.startDate||S.valueOf()>this.endDate){w+=" disabled"}else if(a==E){w+=" active"}b.push('<span class="hour'+w+'">'+E+":00</span>")}this.picker.find(".datetimepicker-hours td").html(b.join(""));b=[];for(var E=0;E<60;E+=this.minuteStep){var S=t(r,o,u,a,E);w="";if(S.valueOf()<this.startDate||S.valueOf()>this.endDate){w+=" disabled"}else if(Math.floor(f/this.minuteStep)==Math.floor(E/this.minuteStep)){w+=" active"}b.push('<span class="minute'+w+'">'+a+":"+(E<10?"0"+E:E)+"</span>")}this.picker.find(".datetimepicker-minutes td").html(b.join(""));var x=this.date.getUTCFullYear();var T=this.picker.find(".datetimepicker-months").find("th:eq(1)").text(r).end().find("span").removeClass("active");if(x==r){T.eq(this.date.getUTCMonth()).addClass("active")}if(r<l||r>h){T.addClass("disabled")}if(r==l){T.slice(0,c).addClass("disabled")}if(r==h){T.slice(p+1).addClass("disabled")}b="";r=parseInt(r/10,10)*10;var N=this.picker.find(".datetimepicker-years").find("th:eq(1)").text(r+"-"+(r+9)).end().find("td");r-=1;for(var E=-1;E<11;E++){b+='<span class="year'+(E==-1||E==10?" old":"")+(x==r?" active":"")+(r<l||r>h?" disabled":"")+'">'+r+"</span>";r+=1}N.html(b)},updateNavArrows:function(){var e=new Date(this.viewDate),t=e.getUTCFullYear(),n=e.getUTCMonth(),r=e.getUTCDate(),i=e.getUTCHours();switch(this.viewMode){case 0:if(this.startDate!==-Infinity&&t<=this.startDate.getUTCFullYear()&&n<=this.startDate.getUTCMonth()&&r<=this.startDate.getUTCDate()&&i<=this.startDate.getUTCHours()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&t>=this.endDate.getUTCFullYear()&&n>=this.endDate.getUTCMonth()&&r>=this.endDate.getUTCDate()&&i>=this.endDate.getUTCHours()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 1:if(this.startDate!==-Infinity&&t<=this.startDate.getUTCFullYear()&&n<=this.startDate.getUTCMonth()&&r<=this.startDate.getUTCDate()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&t>=this.endDate.getUTCFullYear()&&n>=this.endDate.getUTCMonth()&&r>=this.endDate.getUTCDate()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 2:if(this.startDate!==-Infinity&&t<=this.startDate.getUTCFullYear()&&n<=this.startDate.getUTCMonth()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&t>=this.endDate.getUTCFullYear()&&n>=this.endDate.getUTCMonth()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 3:case 4:if(this.startDate!==-Infinity&&t<=this.startDate.getUTCFullYear()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(this.endDate!==Infinity&&t>=this.endDate.getUTCFullYear()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break}},click:function(n){n.stopPropagation();n.preventDefault();var r=e(n.target).closest("span, td, th");if(r.length==1){if(r.is(".disabled")){this.element.trigger({type:"outOfRange",date:this.viewDate,startDate:this.startDate,endDate:this.endDate});return}switch(r[0].nodeName.toLowerCase()){case"th":switch(r[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var i=s.modes[this.viewMode].navStep*(r[0].className=="prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveHour(this.viewDate,i);break;case 1:this.viewDate=this.moveDate(this.viewDate,i);break;case 2:this.viewDate=this.moveMonth(this.viewDate,i);break;case 3:case 4:this.viewDate=this.moveYear(this.viewDate,i);break}this.fill();break;case"today":var o=new Date;o=t(o.getFullYear(),o.getMonth(),o.getDate(),o.getHours(),o.getMinutes(),o.getSeconds());this.viewMode=this.startViewMode;this.showMode(0);this._setDate(o);break}break;case"span":if(!r.is(".disabled")){if(r.is(".month")){this.viewDate.setUTCDate(1);var u=r.parent().find("span").index(r);this.viewDate.setUTCMonth(u);this.element.trigger({type:"changeMonth",date:this.viewDate})}else if(r.is(".year")){this.viewDate.setUTCDate(1);var a=parseInt(r.text(),10)||0;this.viewDate.setUTCFullYear(a);this.element.trigger({type:"changeYear",date:this.viewDate})}else if(r.is(".hour")){var f=parseInt(r.text(),10)||0;var a=this.viewDate.getUTCFullYear(),u=this.viewDate.getUTCMonth(),l=this.viewDate.getUTCDate(),c=this.viewDate.getUTCMinutes(),h=this.viewDate.getUTCSeconds();this._setDate(t(a,u,l,f,c,h,0))}else if(r.is(".minute")){var c=parseInt(r.text().substr(r.text().indexOf(":")+1),10)||0;var a=this.viewDate.getUTCFullYear(),u=this.viewDate.getUTCMonth(),l=this.viewDate.getUTCDate(),f=this.viewDate.getUTCHours(),h=this.viewDate.getUTCSeconds();this._setDate(t(a,u,l,f,c,h,0))}if(this.viewMode!=0){var p=this.viewMode;this.showMode(-1);this.fill();if(p==this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}}break;case"td":if(r.is(".day")&&!r.is(".disabled")){var l=parseInt(r.text(),10)||1;var a=this.viewDate.getUTCFullYear(),u=this.viewDate.getUTCMonth(),f=this.viewDate.getUTCHours(),c=this.viewDate.getUTCMinutes(),h=this.viewDate.getUTCSeconds();if(r.is(".old")){if(u===0){u=11;a-=1}else{u-=1}}else if(r.is(".new")){if(u==11){u=0;a+=1}else{u+=1}}this._setDate(t(a,u,l,f,c,h,0))}var p=this.viewMode;this.showMode(-1);this.fill();if(p==this.viewMode&&this.autoclose){this.hide()}break}}},_setDate:function(e,t){if(!t||t=="date")this.date=e;if(!t||t=="view")this.viewDate=e;this.fill();this.element.trigger({type:"changeDate",date:this.date});this.setValue();var n;if(this.isInput){n=this.element}else if(this.component){n=this.element.find("input")}if(n){n.change();if(this.autoclose&&(!t||t=="date")){}}},moveHour:function(e,t){if(!t)return e;var n=new Date(e.valueOf());t=t>0?1:-1;n.setUTCHours(n.getUTCHours()+t);return n},moveDate:function(e,t){if(!t)return e;var n=new Date(e.valueOf());t=t>0?1:-1;n.setUTCDate(n.getUTCDate()+t);return n},moveMonth:function(e,t){if(!t)return e;var n=new Date(e.valueOf()),r=n.getUTCDate(),i=n.getUTCMonth(),s=Math.abs(t),o,u;t=t>0?1:-1;if(s==1){u=t==-1?function(){return n.getUTCMonth()==i}:function(){return n.getUTCMonth()!=o};o=i+t;n.setUTCMonth(o);if(o<0||o>11)o=(o+12)%12}else{for(var a=0;a<s;a++)n=this.moveMonth(n,t);o=n.getUTCMonth();n.setUTCDate(r);u=function(){return o!=n.getUTCMonth()}}while(u()){n.setUTCDate(--r);n.setUTCMonth(o)}return n},moveYear:function(e,t){return this.moveMonth(e,t*12)},dateWithinRange:function(e){return e>=this.startDate&&e<=this.endDate},keydown:function(e){if(this.picker.is(":not(:visible)")){if(e.keyCode==27)this.show();return}var t=false,n,r,i,s,o;switch(e.keyCode){case 27:this.hide();e.preventDefault();break;case 37:case 39:if(!this.keyboardNavigation)break;n=e.keyCode==37?-1:1;if(e.ctrlKey){s=this.moveYear(this.date,n);o=this.moveYear(this.viewDate,n)}else if(e.shiftKey){s=this.moveMonth(this.date,n);o=this.moveMonth(this.viewDate,n)}else{s=new Date(this.date);s.setUTCDate(this.date.getUTCDate()+n);o=new Date(this.viewDate);o.setUTCDate(this.viewDate.getUTCDate()+n)}if(this.dateWithinRange(s)){this.date=s;this.viewDate=o;this.setValue();this.update();e.preventDefault();t=true}break;case 38:case 40:if(!this.keyboardNavigation)break;n=e.keyCode==38?-1:1;if(e.ctrlKey){s=this.moveYear(this.date,n);o=this.moveYear(this.viewDate,n)}else if(e.shiftKey){s=this.moveMonth(this.date,n);o=this.moveMonth(this.viewDate,n)}else{s=new Date(this.date);s.setUTCDate(this.date.getUTCDate()+n*7);o=new Date(this.viewDate);o.setUTCDate(this.viewDate.getUTCDate()+n*7)}if(this.dateWithinRange(s)){this.date=s;this.viewDate=o;this.setValue();this.update();e.preventDefault();t=true}break;case 13:this.hide();e.preventDefault();break;case 9:this.hide();break}if(t){this.element.trigger({type:"changeDate",date:this.date});var u;if(this.isInput){u=this.element}else if(this.component){u=this.element.find("input")}if(u){u.change()}}},showMode:function(e){if(e){var t=Math.max(0,Math.min(s.modes.length-1,this.viewMode+e));if(t>=this.minView&&t<=this.maxView){this.viewMode=t}}this.picker.find(">div").hide().filter(".datetimepicker-"+s.modes[this.viewMode].clsName).css("display","block");this.updateNavArrows()},reset:function(e){this._setDate(null,"date")}};e.fn.datetimepicker=function(t){var n=Array.apply(null,arguments);n.shift();return this.each(function(){var i=e(this),s=i.data("datetimepicker"),o=typeof t=="object"&&t;if(!s){i.data("datetimepicker",s=new r(this,e.extend({},e.fn.datetimepicker.defaults,o)))}if(typeof t=="string"&&typeof s[t]=="function"){s[t].apply(s,n)}})};e.fn.datetimepicker.defaults={};e.fn.datetimepicker.Constructor=r;var i=e.fn.datetimepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["am","pm"],suffix:["st","nd","rd","th"],today:"Today"}};var s={modes:[{clsName:"minutes",navFnc:"Hours",navStep:1},{clsName:"hours",navFnc:"Date",navStep:1},{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(e){return e%4===0&&e%100!==0||e%400===0},getDaysInMonth:function(e,t){return[31,s.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},getDefaultFormat:function(e,t){if(e=="standard"){if(t=="input")return"yyyy-mm-dd hh:ii";else return"yyyy-mm-dd hh:ii:ss"}else if(e=="php"){if(t=="input")return"Y-m-d H:i";else return"Y-m-d H:i:s"}else{throw new Error("Invalid format type.")}},validParts:function(e){if(e=="standard"){return/hh?|ii?|ss?|dd?|mm?|MM?|yy(?:yy)?/g}else if(e=="php"){return/[dDjlNwzFmMnStyYaABgGhHis]/g}else{throw new Error("Invalid format type.")}},nonpunctuation:/[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,parseFormat:function(e,t){var n=e.replace(this.validParts(t),"\0").split("\0"),r=e.match(this.validParts(t));if(!n||!n.length||!r||r.length==0){throw new Error("Invalid date format.")}return{separators:n,parts:r}},parseDate:function(n,s,o,u){if(n instanceof Date){var a=new Date(n.valueOf()-n.getTimezoneOffset()*6e4);return a}if(/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(n)){s=this.parseFormat("yyyy-mm-dd",u)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(n)){s=this.parseFormat("yyyy-mm-dd hh:ii",u)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(n)){s=this.parseFormat("yyyy-mm-dd hh:ii:ss",u)}if(/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(n)){var f=/([-+]\d+)([dmwy])/,l=n.match(/([-+]\d+)([dmwy])/g),c,h;n=new Date;for(var p=0;p<l.length;p++){c=f.exec(l[p]);h=parseInt(c[1]);switch(c[2]){case"d":n.setUTCDate(n.getUTCDate()+h);break;case"m":n=r.prototype.moveMonth.call(r.prototype,n,h);break;case"w":n.setUTCDate(n.getUTCDate()+h*7);break;case"y":n=r.prototype.moveYear.call(r.prototype,n,h);break}}return t(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds())}var l=n&&n.match(this.nonpunctuation)||[],n=new Date(0,0,0,0,0,0),d={},v=["hh","h","ii","i","ss","s","yyyy","yy","M","MM","m","mm","d","dd"],m={hh:function(e,t){return e.setUTCHours(t)},h:function(e,t){return e.setUTCHours(t)},ii:function(e,t){return e.setUTCMinutes(t)},i:function(e,t){return e.setUTCMinutes(t)},ss:function(e,t){return e.setUTCSeconds(t)},s:function(e,t){return e.setUTCSeconds(t)},yyyy:function(e,t){return e.setUTCFullYear(t)},yy:function(e,t){return e.setUTCFullYear(2e3+t)},m:function(e,t){t-=1;while(t<0)t+=12;t%=12;e.setUTCMonth(t);while(e.getUTCMonth()!=t)e.setUTCDate(e.getUTCDate()-1);return e},d:function(e,t){return e.setUTCDate(t)}},g,y,c;m["M"]=m["MM"]=m["mm"]=m["m"];m["dd"]=m["d"];n=t(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds());if(l.length==s.parts.length){for(var p=0,b=s.parts.length;p<b;p++){g=parseInt(l[p],10);c=s.parts[p];if(isNaN(g)){switch(c){case"MM":y=e(i[o].months).filter(function(){var e=this.slice(0,l[p].length),t=l[p].slice(0,e.length);return e==t});g=e.inArray(y[0],i[o].months)+1;break;case"M":y=e(i[o].monthsShort).filter(function(){var e=this.slice(0,l[p].length),t=l[p].slice(0,e.length);return e==t});g=e.inArray(y[0],i[o].monthsShort)+1;break}}d[c]=g}for(var p=0,w;p<v.length;p++){w=v[p];if(w in d&&!isNaN(d[w]))m[w](n,d[w])}}return n},formatDate:function(t,n,r,o){if(t==null){return""}var u;if(o=="standard"){u={yy:t.getUTCFullYear().toString().substring(2),yyyy:t.getUTCFullYear(),m:t.getUTCMonth()+1,M:i[r].monthsShort[t.getUTCMonth()],MM:i[r].months[t.getUTCMonth()],d:t.getUTCDate(),h:t.getUTCHours(),i:t.getUTCMinutes(),s:t.getUTCSeconds()};u.hh=(u.h<10?"0":"")+u.h;u.ii=(u.i<10?"0":"")+u.i;u.ss=(u.s<10?"0":"")+u.s;u.dd=(u.d<10?"0":"")+u.d;u.mm=(u.m<10?"0":"")+u.m}else if(o=="php"){u={y:t.getUTCFullYear().toString().substring(2),Y:t.getUTCFullYear(),F:i[r].months[t.getUTCMonth()],M:i[r].monthsShort[t.getUTCMonth()],n:t.getUTCMonth()+1,t:s.getDaysInMonth(t.getUTCFullYear(),t.getUTCMonth()),j:t.getUTCDate(),l:i[r].days[t.getUTCDay()],D:i[r].daysShort[t.getUTCDay()],w:t.getUTCDay(),N:t.getUTCDay()==0?7:t.getUTCDay(),S:t.getUTCDate()%10<=i[r].suffix.length?i[r].suffix[t.getUTCDate()%10-1]:"",a:i[r].meridiem.length==2?i[r].meridiem[t.getUTCHours()<12?0:1]:"",g:t.getUTCHours()%12==0?12:t.getUTCHours()%12,G:t.getUTCHours(),i:t.getUTCMinutes(),s:t.getUTCSeconds()};u.m=(u.n<10?"0":"")+u.n;u.d=(u.j<10?"0":"")+u.j;u.A=u.a.toString().toUpperCase();u.h=(u.g<10?"0":"")+u.g;u.H=(u.G<10?"0":"")+u.G;u.i=(u.i<10?"0":"")+u.i;u.s=(u.s<10?"0":"")+u.s}else{throw new Error("Invalid format type.")}var t=[],a=e.extend([],n.separators);for(var f=0,l=n.parts.length;f<l;f++){if(a.length)t.push(a.shift());t.push(u[n.parts[f]])}return t.join("")},convertViewMode:function(e){switch(e){case 4:case"decade":e=4;break;case 3:case"year":e=3;break;case 2:case"month":e=2;break;case 1:case"day":e=1;break;case 0:case"hour":e=0;break}return e},headTemplate:"<thead>"+"<tr>"+'<th class="prev"><i class="icon-arrow-left"/></th>'+'<th colspan="5" class="switch"></th>'+'<th class="next"><i class="icon-arrow-right"/></th>'+"</tr>"+"</thead>",contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'};s.template='<div class="datetimepicker">'+'<div class="datetimepicker-minutes">'+'<table class=" table-condensed">'+s.headTemplate+s.contTemplate+s.footTemplate+"</table>"+"</div>"+'<div class="datetimepicker-hours">'+'<table class=" table-condensed">'+s.headTemplate+s.contTemplate+s.footTemplate+"</table>"+"</div>"+'<div class="datetimepicker-days">'+'<table class=" table-condensed">'+s.headTemplate+"<tbody></tbody>"+s.footTemplate+"</table>"+"</div>"+'<div class="datetimepicker-months">'+'<table class="table-condensed">'+s.headTemplate+s.contTemplate+s.footTemplate+"</table>"+"</div>"+'<div class="datetimepicker-years">'+'<table class="table-condensed">'+s.headTemplate+s.contTemplate+s.footTemplate+"</table>"+"</div>"+"</div>";e.fn.datetimepicker.DPGlobal=s}(window.jQuery)
|
@@ -0,0 +1,492 @@
|
|
1
|
+
!function($, wysi) {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
var tpl = {
|
5
|
+
"font-styles": function(locale, options) {
|
6
|
+
var size = (options && options.size) ? ' btn-'+options.size : '';
|
7
|
+
return "<li class='dropdown'>" +
|
8
|
+
"<a class='btn dropdown-toggle" + size + "' data-toggle='dropdown' href='#'>" +
|
9
|
+
"<i class='icon-font'></i> <span class='current-font'>" + locale.font_styles.normal + "</span> <b class='caret'></b>" +
|
10
|
+
"</a>" +
|
11
|
+
"<ul class='dropdown-menu'>" +
|
12
|
+
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='div' tabindex='-1'>" + locale.font_styles.normal + "</a></li>" +
|
13
|
+
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='h1' tabindex='-1'>" + locale.font_styles.h1 + "</a></li>" +
|
14
|
+
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='h2' tabindex='-1'>" + locale.font_styles.h2 + "</a></li>" +
|
15
|
+
"<li><a data-wysihtml5-command='formatBlock' data-wysihtml5-command-value='h3' tabindex='-1'>" + locale.font_styles.h3 + "</a></li>" +
|
16
|
+
"</ul>" +
|
17
|
+
"</li>";
|
18
|
+
},
|
19
|
+
|
20
|
+
"emphasis": function(locale, options) {
|
21
|
+
var size = (options && options.size) ? ' btn-'+options.size : '';
|
22
|
+
return "<li>" +
|
23
|
+
"<div class='btn-group'>" +
|
24
|
+
"<a class='btn" + size + "' data-wysihtml5-command='bold' title='CTRL+B' tabindex='-1'>" + locale.emphasis.bold + "</a>" +
|
25
|
+
"<a class='btn" + size + "' data-wysihtml5-command='italic' title='CTRL+I' tabindex='-1'>" + locale.emphasis.italic + "</a>" +
|
26
|
+
"<a class='btn" + size + "' data-wysihtml5-command='underline' title='CTRL+U' tabindex='-1'>" + locale.emphasis.underline + "</a>" +
|
27
|
+
"</div>" +
|
28
|
+
"</li>";
|
29
|
+
},
|
30
|
+
|
31
|
+
"lists": function(locale, options) {
|
32
|
+
var size = (options && options.size) ? ' btn-'+options.size : '';
|
33
|
+
return "<li>" +
|
34
|
+
"<div class='btn-group'>" +
|
35
|
+
"<a class='btn" + size + "' data-wysihtml5-command='insertUnorderedList' title='" + locale.lists.unordered + "' tabindex='-1'><i class='icon-list'></i></a>" +
|
36
|
+
"<a class='btn" + size + "' data-wysihtml5-command='insertOrderedList' title='" + locale.lists.ordered + "' tabindex='-1'><i class='icon-th-list'></i></a>" +
|
37
|
+
"<a class='btn" + size + "' data-wysihtml5-command='Outdent' title='" + locale.lists.outdent + "' tabindex='-1'><i class='icon-indent-right'></i></a>" +
|
38
|
+
"<a class='btn" + size + "' data-wysihtml5-command='Indent' title='" + locale.lists.indent + "' tabindex='-1'><i class='icon-indent-left'></i></a>" +
|
39
|
+
"</div>" +
|
40
|
+
"</li>";
|
41
|
+
},
|
42
|
+
|
43
|
+
"link": function(locale, options) {
|
44
|
+
var size = (options && options.size) ? ' btn-'+options.size : '';
|
45
|
+
return "<li>" +
|
46
|
+
"<div class='bootstrap-wysihtml5-insert-link-modal modal hide fade'>" +
|
47
|
+
"<div class='modal-header'>" +
|
48
|
+
"<a class='close' data-dismiss='modal'>×</a>" +
|
49
|
+
"<h3>" + locale.link.insert + "</h3>" +
|
50
|
+
"</div>" +
|
51
|
+
"<div class='modal-body'>" +
|
52
|
+
"<input value='http://' class='bootstrap-wysihtml5-insert-link-url input-xlarge'>" +
|
53
|
+
"</div>" +
|
54
|
+
"<div class='modal-footer'>" +
|
55
|
+
"<a href='#' class='btn' data-dismiss='modal'>" + locale.link.cancel + "</a>" +
|
56
|
+
"<a href='#' class='btn btn-primary' data-dismiss='modal'>" + locale.link.insert + "</a>" +
|
57
|
+
"</div>" +
|
58
|
+
"</div>" +
|
59
|
+
"<a class='btn" + size + "' data-wysihtml5-command='createLink' title='" + locale.link.insert + "' tabindex='-1'><i class='icon-share'></i></a>" +
|
60
|
+
"</li>";
|
61
|
+
},
|
62
|
+
|
63
|
+
"image": function(locale, options) {
|
64
|
+
var size = (options && options.size) ? ' btn-'+options.size : '';
|
65
|
+
return "<li>" +
|
66
|
+
"<div class='bootstrap-wysihtml5-insert-image-modal modal hide fade'>" +
|
67
|
+
"<div class='modal-header'>" +
|
68
|
+
"<a class='close' data-dismiss='modal'>×</a>" +
|
69
|
+
"<h3>" + locale.image.insert + "</h3>" +
|
70
|
+
"</div>" +
|
71
|
+
"<div class='modal-body'>" +
|
72
|
+
"<input value='http://' class='bootstrap-wysihtml5-insert-image-url input-xlarge'>" +
|
73
|
+
"</div>" +
|
74
|
+
"<div class='modal-footer'>" +
|
75
|
+
"<a href='#' class='btn' data-dismiss='modal'>" + locale.image.cancel + "</a>" +
|
76
|
+
"<a href='#' class='btn btn-primary' data-dismiss='modal'>" + locale.image.insert + "</a>" +
|
77
|
+
"</div>" +
|
78
|
+
"</div>" +
|
79
|
+
"<a class='btn" + size + "' data-wysihtml5-command='insertImage' title='" + locale.image.insert + "' tabindex='-1'><i class='icon-picture'></i></a>" +
|
80
|
+
"</li>";
|
81
|
+
},
|
82
|
+
|
83
|
+
"html": function(locale, options) {
|
84
|
+
var size = (options && options.size) ? ' btn-'+options.size : '';
|
85
|
+
return "<li>" +
|
86
|
+
"<div class='btn-group'>" +
|
87
|
+
"<a class='btn" + size + "' data-wysihtml5-action='change_view' title='" + locale.html.edit + "' tabindex='-1'><i class='icon-pencil'></i></a>" +
|
88
|
+
"</div>" +
|
89
|
+
"</li>";
|
90
|
+
},
|
91
|
+
|
92
|
+
"color": function(locale, options) {
|
93
|
+
var size = (options && options.size) ? ' btn-'+options.size : '';
|
94
|
+
return "<li class='dropdown'>" +
|
95
|
+
"<a class='btn dropdown-toggle" + size + "' data-toggle='dropdown' href='#' tabindex='-1'>" +
|
96
|
+
"<span class='current-color'>" + locale.colours.black + "</span> <b class='caret'></b>" +
|
97
|
+
"</a>" +
|
98
|
+
"<ul class='dropdown-menu'>" +
|
99
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='black'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='black'>" + locale.colours.black + "</a></li>" +
|
100
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='silver'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='silver'>" + locale.colours.silver + "</a></li>" +
|
101
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='gray'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='gray'>" + locale.colours.gray + "</a></li>" +
|
102
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='maroon'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='maroon'>" + locale.colours.maroon + "</a></li>" +
|
103
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='red'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='red'>" + locale.colours.red + "</a></li>" +
|
104
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='purple'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='purple'>" + locale.colours.purple + "</a></li>" +
|
105
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='green'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='green'>" + locale.colours.green + "</a></li>" +
|
106
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='olive'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='olive'>" + locale.colours.olive + "</a></li>" +
|
107
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='navy'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='navy'>" + locale.colours.navy + "</a></li>" +
|
108
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='blue'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='blue'>" + locale.colours.blue + "</a></li>" +
|
109
|
+
"<li><div class='wysihtml5-colors' data-wysihtml5-command-value='orange'></div><a class='wysihtml5-colors-title' data-wysihtml5-command='foreColor' data-wysihtml5-command-value='orange'>" + locale.colours.orange + "</a></li>" +
|
110
|
+
"</ul>" +
|
111
|
+
"</li>";
|
112
|
+
}
|
113
|
+
};
|
114
|
+
|
115
|
+
var templates = function(key, locale, options) {
|
116
|
+
return tpl[key](locale, options);
|
117
|
+
};
|
118
|
+
|
119
|
+
|
120
|
+
var Wysihtml5 = function(el, options) {
|
121
|
+
this.el = el;
|
122
|
+
var toolbarOpts = options || defaultOptions;
|
123
|
+
for(var t in toolbarOpts.customTemplates) {
|
124
|
+
tpl[t] = toolbarOpts.customTemplates[t];
|
125
|
+
}
|
126
|
+
this.toolbar = this.createToolbar(el, toolbarOpts);
|
127
|
+
this.editor = this.createEditor(options);
|
128
|
+
|
129
|
+
window.editor = this.editor;
|
130
|
+
|
131
|
+
$('iframe.wysihtml5-sandbox').each(function(i, el){
|
132
|
+
$(el.contentWindow).off('focus.wysihtml5').on({
|
133
|
+
'focus.wysihtml5' : function(){
|
134
|
+
$('li.dropdown').removeClass('open');
|
135
|
+
}
|
136
|
+
});
|
137
|
+
});
|
138
|
+
};
|
139
|
+
|
140
|
+
Wysihtml5.prototype = {
|
141
|
+
|
142
|
+
constructor: Wysihtml5,
|
143
|
+
|
144
|
+
createEditor: function(options) {
|
145
|
+
options = options || {};
|
146
|
+
options.toolbar = this.toolbar[0];
|
147
|
+
|
148
|
+
var editor = new wysi.Editor(this.el[0], options);
|
149
|
+
|
150
|
+
if(options && options.events) {
|
151
|
+
for(var eventName in options.events) {
|
152
|
+
editor.on(eventName, options.events[eventName]);
|
153
|
+
}
|
154
|
+
}
|
155
|
+
return editor;
|
156
|
+
},
|
157
|
+
|
158
|
+
createToolbar: function(el, options) {
|
159
|
+
var self = this;
|
160
|
+
var toolbar = $("<ul/>", {
|
161
|
+
'class' : "wysihtml5-toolbar",
|
162
|
+
'style': "display:none"
|
163
|
+
});
|
164
|
+
var culture = options.locale || defaultOptions.locale || "en";
|
165
|
+
for(var key in defaultOptions) {
|
166
|
+
var value = false;
|
167
|
+
|
168
|
+
if(options[key] !== undefined) {
|
169
|
+
if(options[key] === true) {
|
170
|
+
value = true;
|
171
|
+
}
|
172
|
+
} else {
|
173
|
+
value = defaultOptions[key];
|
174
|
+
}
|
175
|
+
|
176
|
+
if(value === true) {
|
177
|
+
toolbar.append(templates(key, locale[culture], options));
|
178
|
+
|
179
|
+
if(key === "html") {
|
180
|
+
this.initHtml(toolbar);
|
181
|
+
}
|
182
|
+
|
183
|
+
if(key === "link") {
|
184
|
+
this.initInsertLink(toolbar);
|
185
|
+
}
|
186
|
+
|
187
|
+
if(key === "image") {
|
188
|
+
this.initInsertImage(toolbar);
|
189
|
+
}
|
190
|
+
}
|
191
|
+
}
|
192
|
+
|
193
|
+
if(options.toolbar) {
|
194
|
+
for(key in options.toolbar) {
|
195
|
+
toolbar.append(options.toolbar[key]);
|
196
|
+
}
|
197
|
+
}
|
198
|
+
|
199
|
+
toolbar.find("a[data-wysihtml5-command='formatBlock']").click(function(e) {
|
200
|
+
var target = e.target || e.srcElement;
|
201
|
+
var el = $(target);
|
202
|
+
self.toolbar.find('.current-font').text(el.html());
|
203
|
+
});
|
204
|
+
|
205
|
+
toolbar.find("a[data-wysihtml5-command='foreColor']").click(function(e) {
|
206
|
+
var target = e.target || e.srcElement;
|
207
|
+
var el = $(target);
|
208
|
+
self.toolbar.find('.current-color').text(el.html());
|
209
|
+
});
|
210
|
+
|
211
|
+
this.el.before(toolbar);
|
212
|
+
|
213
|
+
return toolbar;
|
214
|
+
},
|
215
|
+
|
216
|
+
initHtml: function(toolbar) {
|
217
|
+
var changeViewSelector = "a[data-wysihtml5-action='change_view']";
|
218
|
+
toolbar.find(changeViewSelector).click(function(e) {
|
219
|
+
toolbar.find('a.btn').not(changeViewSelector).toggleClass('disabled');
|
220
|
+
});
|
221
|
+
},
|
222
|
+
|
223
|
+
initInsertImage: function(toolbar) {
|
224
|
+
var self = this;
|
225
|
+
var insertImageModal = toolbar.find('.bootstrap-wysihtml5-insert-image-modal');
|
226
|
+
var urlInput = insertImageModal.find('.bootstrap-wysihtml5-insert-image-url');
|
227
|
+
var insertButton = insertImageModal.find('a.btn-primary');
|
228
|
+
var initialValue = urlInput.val();
|
229
|
+
var caretBookmark;
|
230
|
+
|
231
|
+
var insertImage = function() {
|
232
|
+
var url = urlInput.val();
|
233
|
+
urlInput.val(initialValue);
|
234
|
+
self.editor.currentView.element.focus();
|
235
|
+
if (caretBookmark) {
|
236
|
+
self.editor.composer.selection.setBookmark(caretBookmark);
|
237
|
+
caretBookmark = null;
|
238
|
+
}
|
239
|
+
self.editor.composer.commands.exec("insertImage", url);
|
240
|
+
};
|
241
|
+
|
242
|
+
urlInput.keypress(function(e) {
|
243
|
+
if(e.which == 13) {
|
244
|
+
insertImage();
|
245
|
+
insertImageModal.modal('hide');
|
246
|
+
}
|
247
|
+
});
|
248
|
+
|
249
|
+
insertButton.click(insertImage);
|
250
|
+
|
251
|
+
insertImageModal.on('shown', function() {
|
252
|
+
urlInput.focus();
|
253
|
+
});
|
254
|
+
|
255
|
+
insertImageModal.on('hide', function() {
|
256
|
+
self.editor.currentView.element.focus();
|
257
|
+
});
|
258
|
+
|
259
|
+
toolbar.find('a[data-wysihtml5-command=insertImage]').click(function() {
|
260
|
+
var activeButton = $(this).hasClass("wysihtml5-command-active");
|
261
|
+
|
262
|
+
if (!activeButton) {
|
263
|
+
self.editor.currentView.element.focus(false);
|
264
|
+
caretBookmark = self.editor.composer.selection.getBookmark();
|
265
|
+
insertImageModal.modal('show');
|
266
|
+
insertImageModal.on('click.dismiss.modal', '[data-dismiss="modal"]', function(e) {
|
267
|
+
e.stopPropagation();
|
268
|
+
});
|
269
|
+
return false;
|
270
|
+
}
|
271
|
+
else {
|
272
|
+
return true;
|
273
|
+
}
|
274
|
+
});
|
275
|
+
},
|
276
|
+
|
277
|
+
initInsertLink: function(toolbar) {
|
278
|
+
var self = this;
|
279
|
+
var insertLinkModal = toolbar.find('.bootstrap-wysihtml5-insert-link-modal');
|
280
|
+
var urlInput = insertLinkModal.find('.bootstrap-wysihtml5-insert-link-url');
|
281
|
+
var insertButton = insertLinkModal.find('a.btn-primary');
|
282
|
+
var initialValue = urlInput.val();
|
283
|
+
var caretBookmark;
|
284
|
+
|
285
|
+
var insertLink = function() {
|
286
|
+
var url = urlInput.val();
|
287
|
+
urlInput.val(initialValue);
|
288
|
+
self.editor.currentView.element.focus();
|
289
|
+
if (caretBookmark) {
|
290
|
+
self.editor.composer.selection.setBookmark(caretBookmark);
|
291
|
+
caretBookmark = null;
|
292
|
+
}
|
293
|
+
self.editor.composer.commands.exec("createLink", {
|
294
|
+
href: url,
|
295
|
+
target: "_blank",
|
296
|
+
rel: "nofollow"
|
297
|
+
});
|
298
|
+
};
|
299
|
+
var pressedEnter = false;
|
300
|
+
|
301
|
+
urlInput.keypress(function(e) {
|
302
|
+
if(e.which == 13) {
|
303
|
+
insertLink();
|
304
|
+
insertLinkModal.modal('hide');
|
305
|
+
}
|
306
|
+
});
|
307
|
+
|
308
|
+
insertButton.click(insertLink);
|
309
|
+
|
310
|
+
insertLinkModal.on('shown', function() {
|
311
|
+
urlInput.focus();
|
312
|
+
});
|
313
|
+
|
314
|
+
insertLinkModal.on('hide', function() {
|
315
|
+
self.editor.currentView.element.focus();
|
316
|
+
});
|
317
|
+
|
318
|
+
toolbar.find('a[data-wysihtml5-command=createLink]').click(function() {
|
319
|
+
var activeButton = $(this).hasClass("wysihtml5-command-active");
|
320
|
+
|
321
|
+
if (!activeButton) {
|
322
|
+
self.editor.currentView.element.focus(false);
|
323
|
+
caretBookmark = self.editor.composer.selection.getBookmark();
|
324
|
+
insertLinkModal.appendTo('body').modal('show');
|
325
|
+
insertLinkModal.on('click.dismiss.modal', '[data-dismiss="modal"]', function(e) {
|
326
|
+
e.stopPropagation();
|
327
|
+
});
|
328
|
+
return false;
|
329
|
+
}
|
330
|
+
else {
|
331
|
+
return true;
|
332
|
+
}
|
333
|
+
});
|
334
|
+
}
|
335
|
+
};
|
336
|
+
|
337
|
+
// these define our public api
|
338
|
+
var methods = {
|
339
|
+
resetDefaults: function() {
|
340
|
+
$.fn.wysihtml5.defaultOptions = $.extend(true, {}, $.fn.wysihtml5.defaultOptionsCache);
|
341
|
+
},
|
342
|
+
bypassDefaults: function(options) {
|
343
|
+
return this.each(function () {
|
344
|
+
var $this = $(this);
|
345
|
+
$this.data('wysihtml5', new Wysihtml5($this, options));
|
346
|
+
});
|
347
|
+
},
|
348
|
+
shallowExtend: function (options) {
|
349
|
+
var settings = $.extend({}, $.fn.wysihtml5.defaultOptions, options || {});
|
350
|
+
var that = this;
|
351
|
+
return methods.bypassDefaults.apply(that, [settings]);
|
352
|
+
},
|
353
|
+
deepExtend: function(options) {
|
354
|
+
var settings = $.extend(true, {}, $.fn.wysihtml5.defaultOptions, options || {});
|
355
|
+
var that = this;
|
356
|
+
return methods.bypassDefaults.apply(that, [settings]);
|
357
|
+
},
|
358
|
+
init: function(options) {
|
359
|
+
var that = this;
|
360
|
+
return methods.shallowExtend.apply(that, [options]);
|
361
|
+
}
|
362
|
+
};
|
363
|
+
|
364
|
+
$.fn.wysihtml5 = function ( method ) {
|
365
|
+
if ( methods[method] ) {
|
366
|
+
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
|
367
|
+
} else if ( typeof method === 'object' || ! method ) {
|
368
|
+
return methods.init.apply( this, arguments );
|
369
|
+
} else {
|
370
|
+
$.error( 'Method ' + method + ' does not exist on jQuery.wysihtml5' );
|
371
|
+
}
|
372
|
+
};
|
373
|
+
|
374
|
+
$.fn.wysihtml5.Constructor = Wysihtml5;
|
375
|
+
|
376
|
+
var defaultOptions = $.fn.wysihtml5.defaultOptions = {
|
377
|
+
"font-styles": true,
|
378
|
+
"color": false,
|
379
|
+
"emphasis": true,
|
380
|
+
"lists": true,
|
381
|
+
"html": false,
|
382
|
+
"link": true,
|
383
|
+
"image": true,
|
384
|
+
events: {},
|
385
|
+
parserRules: {
|
386
|
+
classes: {
|
387
|
+
// (path_to_project/lib/css/wysiwyg-color.css)
|
388
|
+
"wysiwyg-color-silver" : 1,
|
389
|
+
"wysiwyg-color-gray" : 1,
|
390
|
+
"wysiwyg-color-white" : 1,
|
391
|
+
"wysiwyg-color-maroon" : 1,
|
392
|
+
"wysiwyg-color-red" : 1,
|
393
|
+
"wysiwyg-color-purple" : 1,
|
394
|
+
"wysiwyg-color-fuchsia" : 1,
|
395
|
+
"wysiwyg-color-green" : 1,
|
396
|
+
"wysiwyg-color-lime" : 1,
|
397
|
+
"wysiwyg-color-olive" : 1,
|
398
|
+
"wysiwyg-color-yellow" : 1,
|
399
|
+
"wysiwyg-color-navy" : 1,
|
400
|
+
"wysiwyg-color-blue" : 1,
|
401
|
+
"wysiwyg-color-teal" : 1,
|
402
|
+
"wysiwyg-color-aqua" : 1,
|
403
|
+
"wysiwyg-color-orange" : 1
|
404
|
+
},
|
405
|
+
tags: {
|
406
|
+
"b": {},
|
407
|
+
"i": {},
|
408
|
+
"br": {},
|
409
|
+
"ol": {},
|
410
|
+
"ul": {},
|
411
|
+
"li": {},
|
412
|
+
"h1": {},
|
413
|
+
"h2": {},
|
414
|
+
"h3": {},
|
415
|
+
"blockquote": {},
|
416
|
+
"u": 1,
|
417
|
+
"img": {
|
418
|
+
"check_attributes": {
|
419
|
+
"width": "numbers",
|
420
|
+
"alt": "alt",
|
421
|
+
"src": "url",
|
422
|
+
"height": "numbers"
|
423
|
+
}
|
424
|
+
},
|
425
|
+
"a": {
|
426
|
+
set_attributes: {
|
427
|
+
target: "_blank",
|
428
|
+
rel: "nofollow"
|
429
|
+
},
|
430
|
+
check_attributes: {
|
431
|
+
href: "url" // important to avoid XSS
|
432
|
+
}
|
433
|
+
},
|
434
|
+
"span": 1,
|
435
|
+
"div": 1
|
436
|
+
}
|
437
|
+
},
|
438
|
+
stylesheets: ["./lib/css/wysiwyg-color.css"], // (path_to_project/lib/css/wysiwyg-color.css)
|
439
|
+
locale: "en"
|
440
|
+
};
|
441
|
+
|
442
|
+
if (typeof $.fn.wysihtml5.defaultOptionsCache === 'undefined') {
|
443
|
+
$.fn.wysihtml5.defaultOptionsCache = $.extend(true, {}, $.fn.wysihtml5.defaultOptions);
|
444
|
+
}
|
445
|
+
|
446
|
+
var locale = $.fn.wysihtml5.locale = {
|
447
|
+
en: {
|
448
|
+
font_styles: {
|
449
|
+
normal: "Normal text",
|
450
|
+
h1: "Heading 1",
|
451
|
+
h2: "Heading 2",
|
452
|
+
h3: "Heading 3"
|
453
|
+
},
|
454
|
+
emphasis: {
|
455
|
+
bold: "Bold",
|
456
|
+
italic: "Italic",
|
457
|
+
underline: "Underline"
|
458
|
+
},
|
459
|
+
lists: {
|
460
|
+
unordered: "Unordered list",
|
461
|
+
ordered: "Ordered list",
|
462
|
+
outdent: "Outdent",
|
463
|
+
indent: "Indent"
|
464
|
+
},
|
465
|
+
link: {
|
466
|
+
insert: "Insert link",
|
467
|
+
cancel: "Cancel"
|
468
|
+
},
|
469
|
+
image: {
|
470
|
+
insert: "Insert image",
|
471
|
+
cancel: "Cancel"
|
472
|
+
},
|
473
|
+
html: {
|
474
|
+
edit: "Edit HTML"
|
475
|
+
},
|
476
|
+
colours: {
|
477
|
+
black: "Black",
|
478
|
+
silver: "Silver",
|
479
|
+
gray: "Grey",
|
480
|
+
maroon: "Maroon",
|
481
|
+
red: "Red",
|
482
|
+
purple: "Purple",
|
483
|
+
green: "Green",
|
484
|
+
olive: "Olive",
|
485
|
+
navy: "Navy",
|
486
|
+
blue: "Blue",
|
487
|
+
orange: "Orange"
|
488
|
+
}
|
489
|
+
}
|
490
|
+
};
|
491
|
+
|
492
|
+
}(window.jQuery, window.wysihtml5);
|