camaleon_cms 2.1.1 → 2.1.1.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of camaleon_cms might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +35 -1
- data/app/apps/plugins/attack/config/locales/translation.yml +20 -1
- data/app/apps/plugins/contact_form/config/locales/translation.yml +106 -1
- data/app/apps/plugins/contact_form/contact_form_helper.rb +44 -27
- data/app/apps/plugins/front_cache/config/locales/translation.yml +21 -1
- data/app/apps/plugins/front_cache/front_cache_helper.rb +1 -1
- data/app/apps/plugins/visibility_post/assets/js/form.js +1 -3
- data/app/apps/plugins/visibility_post/visibility_post_helper.rb +2 -4
- data/app/assets/images/camaleon_cms/language/de.png +0 -0
- data/app/assets/images/camaleon_cms/language/en.png +0 -0
- data/app/assets/images/camaleon_cms/language/es.png +0 -0
- data/app/assets/images/camaleon_cms/language/fr.png +0 -0
- data/app/assets/images/camaleon_cms/language/it.png +0 -0
- data/app/assets/images/camaleon_cms/language/nl.png +0 -0
- data/app/assets/images/camaleon_cms/language/pl.png +0 -0
- data/app/assets/images/camaleon_cms/language/pt.png +0 -0
- data/app/assets/images/camaleon_cms/language/pt_br.png +0 -0
- data/app/assets/images/camaleon_cms/language/ru.png +0 -0
- data/app/assets/images/camaleon_cms/language/zh.png +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/_custom_fields.js +3 -11
- data/app/assets/javascripts/camaleon_cms/admin/_data.js +2 -6
- data/app/assets/javascripts/camaleon_cms/admin/_libraries.js +11 -229
- data/app/assets/javascripts/camaleon_cms/admin/_modal.js +11 -37
- data/app/assets/javascripts/camaleon_cms/admin/_post.js +27 -22
- data/app/assets/javascripts/camaleon_cms/admin/_translator.js +2 -1
- data/app/assets/javascripts/camaleon_cms/admin/admin-manifest.js +6 -2
- data/app/assets/javascripts/camaleon_cms/admin/bootstrap-datepicker.js +2557 -1689
- data/app/assets/javascripts/camaleon_cms/admin/jquery.validate.js +119 -1361
- data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/nl.js +33 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/_moment.js +3606 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ar.js +136 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ca.js +79 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/de.js +76 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/es.js +79 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/fr.js +62 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/it.js +70 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ja.js +65 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/nl.js +71 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/pl.js +105 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/pt.js +64 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/pt_br.js +60 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/ru.js +166 -0
- data/app/assets/javascripts/camaleon_cms/admin/momentjs/zh.js +127 -0
- data/app/assets/javascripts/camaleon_cms/admin/nav-menu.js +15 -25
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/nl.js +219 -0
- data/app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee +82 -19
- data/app/assets/javascripts/camaleon_cms/admin/user_profile.js +8 -8
- data/app/assets/stylesheets/camaleon_cms/admin/_custom_admin.css.scss +19 -2
- data/app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css +0 -4
- data/app/assets/stylesheets/camaleon_cms/admin/bootstrap-datepicker.css.scss +315 -414
- data/app/assets/stylesheets/camaleon_cms/admin/uploader/_uploadfile.css.scss +7 -3
- data/app/controllers/camaleon_cms/admin/appearances/nav_menus_controller.rb +9 -5
- data/app/controllers/camaleon_cms/admin/categories_controller.rb +5 -0
- data/app/controllers/camaleon_cms/admin/media_controller.rb +27 -10
- data/app/controllers/camaleon_cms/admin/posts_controller.rb +9 -19
- data/app/controllers/camaleon_cms/admin/sessions_controller.rb +3 -10
- data/app/controllers/camaleon_cms/admin/settings/custom_fields_controller.rb +0 -1
- data/app/controllers/camaleon_cms/admin/settings/sites_controller.rb +6 -1
- data/app/controllers/camaleon_cms/admin/users_controller.rb +1 -8
- data/app/controllers/camaleon_cms/admin_controller.rb +5 -4
- data/app/controllers/camaleon_cms/apps/plugins_front_controller.rb +0 -8
- data/app/controllers/camaleon_cms/camaleon_controller.rb +6 -1
- data/app/controllers/camaleon_cms/frontend_controller.rb +11 -8
- data/app/decorators/camaleon_cms/category_decorator.rb +2 -1
- data/app/decorators/camaleon_cms/post_decorator.rb +28 -1
- data/app/decorators/camaleon_cms/post_tag_decorator.rb +1 -0
- data/app/decorators/camaleon_cms/post_type_decorator.rb +17 -0
- data/app/decorators/camaleon_cms/site_decorator.rb +22 -7
- data/app/decorators/camaleon_cms/user_decorator.rb +1 -0
- data/app/helpers/camaleon_cms/admin/application_helper.rb +3 -2
- data/app/helpers/camaleon_cms/admin/custom_fields_helper.rb +13 -25
- data/app/helpers/camaleon_cms/admin/post_type_helper.rb +27 -2
- data/app/helpers/camaleon_cms/camaleon_helper.rb +0 -16
- data/app/helpers/camaleon_cms/captcha_helper.rb +9 -3
- data/app/helpers/camaleon_cms/email_helper.rb +27 -8
- data/app/helpers/camaleon_cms/frontend/nav_menu_helper.rb +21 -17
- data/app/helpers/camaleon_cms/frontend/seo_helper.rb +5 -3
- data/app/helpers/camaleon_cms/html_helper.rb +2 -2
- data/app/helpers/camaleon_cms/site_helper.rb +10 -14
- data/app/helpers/camaleon_cms/uploader_helper.rb +119 -31
- data/app/mailers/camaleon_cms/html_mailer.rb +26 -20
- data/app/models/camaleon_cms/custom_field.rb +1 -0
- data/app/models/camaleon_cms/custom_field_group.rb +2 -1
- data/app/models/camaleon_cms/nav_menu.rb +6 -7
- data/app/models/camaleon_cms/nav_menu_item.rb +2 -1
- data/app/models/camaleon_cms/post.rb +29 -2
- data/app/models/camaleon_cms/post_type.rb +20 -1
- data/app/models/camaleon_cms/site.rb +19 -19
- data/app/models/camaleon_cms/term_taxonomy.rb +1 -1
- data/app/models/concerns/camaleon_cms/custom_fields_read.rb +6 -4
- data/app/models/concerns/camaleon_cms/metas.rb +5 -4
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_custom_fields.html.erb +4 -2
- data/app/views/camaleon_cms/admin/appearances/nav_menus/_external_menu.html.erb +1 -1
- data/app/views/camaleon_cms/admin/appearances/nav_menus/index.html.erb +3 -6
- data/app/views/camaleon_cms/admin/categories/index.html.erb +1 -0
- data/app/views/camaleon_cms/admin/media/_files_list.html.erb +3 -3
- data/app/views/camaleon_cms/admin/media/_render_file_item.html.erb +3 -2
- data/app/views/camaleon_cms/admin/media/index.html.erb +31 -4
- data/app/views/camaleon_cms/admin/posts/_sidebar.html.erb +10 -1
- data/app/views/camaleon_cms/admin/posts/form.html.erb +6 -2
- data/app/views/camaleon_cms/admin/posts/index.html.erb +4 -4
- data/app/views/camaleon_cms/admin/search.html.erb +5 -3
- data/app/views/camaleon_cms/admin/settings/_file_system_settings.html.erb +5 -5
- data/app/views/camaleon_cms/admin/settings/custom_fields/_get_items.html.erb +2 -1
- data/app/views/camaleon_cms/admin/settings/custom_fields/_render.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_date.html.erb +3 -4
- data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_image.html.erb +1 -1
- data/app/views/camaleon_cms/admin/settings/custom_fields/form.html.erb +2 -2
- data/app/views/camaleon_cms/admin/settings/post_types/_form.html.erb +11 -1
- data/app/views/camaleon_cms/admin/settings/post_types/index.html.erb +1 -0
- data/app/views/camaleon_cms/admin/users/form.html.erb +30 -55
- data/app/views/camaleon_cms/html_mailer/mailer.html.erb +1 -1
- data/app/views/camaleon_cms/html_mailer/password_reset.html.erb +3 -0
- data/app/views/layouts/camaleon_cms/admin.html.erb +4 -1
- data/app/views/layouts/camaleon_cms/admin/_ajax.html.erb +3 -1
- data/app/views/layouts/camaleon_cms/admin/_footer.html.erb +1 -1
- data/app/views/layouts/camaleon_cms/admin/_header.html.erb +1 -1
- data/config/initializers/assets.rb +4 -2
- data/config/initializers/model_alias.rb +11 -0
- data/config/locales/camaleon_cms/admin/en.yml +2 -0
- data/config/locales/camaleon_cms/admin/es.yml +2 -1
- data/config/locales/camaleon_cms/admin/it.yml +1 -0
- data/config/locales/camaleon_cms/admin/js.yml +42 -1
- data/config/locales/camaleon_cms/admin/nl.yml +659 -0
- data/config/locales/camaleon_cms/admin/pt_br.yml +1 -0
- data/config/locales/camaleon_cms/admin/ru.yml +659 -0
- data/config/locales/camaleon_cms/common.yml +127 -0
- data/config/locales/camaleon_cms/languages.yml +16 -0
- data/config/locales/camaleon_cms/routes.yml +8 -0
- data/config/locales/nl.yml +209 -0
- data/config/routes.rb +1 -1
- data/config/routes/admin.rb +5 -4
- data/config/routes/frontend.rb +16 -3
- data/config/system.json +2 -3
- data/lib/camaleon_cms/engine.rb +5 -1
- data/lib/camaleon_cms/version.rb +1 -1
- data/lib/ext/array.rb +5 -0
- data/lib/generators/camaleon_cms/gem_plugin_generator.rb +1 -1
- data/lib/generators/camaleon_cms/gem_plugin_template/app/models/plugins/my_plugin/my_plugin.rb +1 -2
- data/lib/generators/camaleon_cms/gem_plugin_template/config/{custom_models.rb → initializers/custom_models.rb} +0 -0
- data/lib/plugin_routes.rb +38 -63
- data/lib/tasks/camaleon_cms/camaleon_tasks.rake +18 -0
- data/lib/tasks/camaleon_cms/rspec_test.rake +7 -4
- metadata +43 -54
- data/app/assets/javascripts/camaleon_cms/admin/bootstrap-datetimepicker.min.js +0 -26
- data/app/assets/javascripts/camaleon_cms/admin/plugins.js +0 -637
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-cool.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-cry.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-embarassed.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-frown.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-innocent.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-kiss.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-laughing.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-money-mouth.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-sealed.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-smile.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-surprised.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-tongue-out.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-undecided.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-wink.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-yell.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/visualblocks/css/visualblocks.css +0 -135
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/content.min.css.scss +0 -4
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.eot +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.svg +0 -62
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.ttf +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.woff +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.eot +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.svg +0 -83
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.ttf +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.woff +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/anchor.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/loader.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/object.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/trans.gif +0 -0
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/themes/modern/theme.min.js +0 -1
- data/app/assets/javascripts/camaleon_cms/admin/tinymce/tinymce.min.js +0 -11
- data/app/assets/stylesheets/camaleon_cms/admin/bootstrap-datetimepicker.css.scss +0 -339
data/config/system.json
CHANGED
@@ -3,9 +3,8 @@
|
|
3
3
|
"hooks": { }, // system hooks
|
4
4
|
"skip_format_url": true, // enable or disable .html extension in the urls.
|
5
5
|
"default_plugins": ["front_cache", "contact_form", "attack"], // Default plugins installed for each new site
|
6
|
-
"available_languages": ["es", "en", "fr", "zh", "de", "it", "pt_br"], // Available languages for frontend panel, here all locales: https://github.com/svenfuchs/rails-i18n
|
7
|
-
"admin_available_languages": ["en", "es", "it", "pt_br"], //Available languages for the admin panel
|
8
|
-
"base_domain": "localhost:3000", // primary domain
|
6
|
+
"available_languages": ["es", "en", "fr", "zh", "de", "it", "pt_br", "nl"], // Available languages for frontend panel, here all locales: https://github.com/svenfuchs/rails-i18n
|
7
|
+
"admin_available_languages": ["en", "es", "it", "pt_br" , "nl"], //Available languages for the admin panel
|
9
8
|
"default_user_role": "client", // default user role for all new users
|
10
9
|
"users_share_sites": true, //(boolean) true: permit to share users between sites, false: All users are assigned for an unique site.
|
11
10
|
"db_prefix": "", // prefix name for database tables
|
data/lib/camaleon_cms/engine.rb
CHANGED
@@ -11,6 +11,7 @@ require 'will_paginate-bootstrap'
|
|
11
11
|
require 'breadcrumbs_on_rails'
|
12
12
|
require 'fog'
|
13
13
|
require 'font-awesome-rails'
|
14
|
+
require 'tinymce-rails'
|
14
15
|
|
15
16
|
$camaleon_engine_dir = File.expand_path("../../../", __FILE__)
|
16
17
|
require File.join($camaleon_engine_dir, "lib", "plugin_routes").to_s
|
@@ -50,7 +51,10 @@ module CamaleonCms
|
|
50
51
|
|
51
52
|
# extra configuration for plugins
|
52
53
|
app.config.eager_load_paths += %W(#{app.config.root}/app/apps/**/)
|
53
|
-
PluginRoutes.all_plugins.each{ |plugin|
|
54
|
+
PluginRoutes.all_plugins.each{ |plugin|
|
55
|
+
app.config.paths["db/migrate"] << File.join(plugin["path"], "migrate") if Dir.exist?(File.join(plugin["path"], "migrate"));
|
56
|
+
app.config.paths["db/migrate"] << File.join(plugin["path"], "db", "migrate") if Dir.exist?(File.join(plugin["path"], "db", "migrate"));
|
57
|
+
}
|
54
58
|
|
55
59
|
# Static files
|
56
60
|
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
|
data/lib/camaleon_cms/version.rb
CHANGED
data/lib/ext/array.rb
CHANGED
@@ -19,7 +19,7 @@ module CamaleonCms
|
|
19
19
|
FileUtils.rm_r(plugin_app) if Dir.exist?(plugin_app)
|
20
20
|
|
21
21
|
FileUtils.mkdir_p(plugin_dir)
|
22
|
-
system("cd #{Rails.root}
|
22
|
+
system("cd #{Rails.root} & rails plugin new apps/plugins/#{get_plugin_name} --full")
|
23
23
|
|
24
24
|
FileUtils.cp_r(File.join($camaleon_engine_dir, "lib", "generators", "camaleon_cms", "gem_plugin_template"), plugin_app)
|
25
25
|
|
data/lib/generators/camaleon_cms/gem_plugin_template/app/models/plugins/my_plugin/my_plugin.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# class Plugins::PluginClass::PluginClass < ActiveRecord::Base
|
2
|
-
#
|
3
|
-
# belongs_to :site
|
2
|
+
# belongs_to :site, class_name: "CamleonCms::Site"
|
4
3
|
|
5
4
|
# here create your models normally
|
6
5
|
# notice: your tables in database will be plugins_pluginKey in plural (check rails documentation)
|
File without changes
|
data/lib/plugin_routes.rb
CHANGED
@@ -62,80 +62,44 @@ class PluginRoutes
|
|
62
62
|
res
|
63
63
|
end
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
# return theme information
|
72
|
-
# if theme_name is nil, the use current site theme
|
73
|
-
def self.theme_info(theme_name)
|
74
|
-
self.all_themes.each{|p| return p if p["key"] == theme_name }
|
75
|
-
nil
|
76
|
-
end
|
65
|
+
class << self
|
66
|
+
# return plugin information
|
67
|
+
def plugin_info(plugin_key)
|
68
|
+
self.all_plugins.each{|p| return p if p["key"] == plugin_key }
|
69
|
+
nil
|
70
|
+
end
|
77
71
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
72
|
+
# return theme information
|
73
|
+
# if theme_name is nil, the use current site theme
|
74
|
+
def theme_info(theme_name)
|
75
|
+
self.all_themes.each{|p| return p if p["key"] == theme_name }
|
76
|
+
nil
|
77
|
+
end
|
82
78
|
|
83
|
-
|
84
|
-
|
79
|
+
# return system static settings (config.json values)
|
80
|
+
def static_system_info
|
81
|
+
r = cache_variable("statis_system_info"); return r unless r.nil?
|
82
|
+
settings = {}
|
85
83
|
|
86
|
-
|
87
|
-
|
84
|
+
gem_settings = File.join($camaleon_engine_dir, "config", "system.json")
|
85
|
+
app_settings = Rails.root.join("config", "system.json")
|
88
86
|
|
89
|
-
|
90
|
-
|
91
|
-
settings["path"] = ''
|
92
|
-
settings["kind"] = "system"
|
93
|
-
settings["hooks"]["on_notification"] = (settings["hooks"]["on_notification"] || []) + ["admin_system_notifications"]
|
94
|
-
cache_variable("statis_system_info", settings)
|
95
|
-
end
|
87
|
+
settings = settings.merge(JSON.parse(File.read(gem_settings))) if File.exist?(gem_settings)
|
88
|
+
settings = settings.merge(JSON.parse(File.read(app_settings))) if File.exist?(app_settings)
|
96
89
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
r = cache_variable("system_info"); return r unless r.nil?
|
104
|
-
settings = static_system_info
|
105
|
-
unless skip_site_settings_db
|
106
|
-
main_site = self.main_site
|
107
|
-
begin
|
108
|
-
settings = settings.merge(main_site.get_meta("main_settings", {}))
|
109
|
-
settings["base_domain"] = main_site.slug if main_site.slug.present?
|
110
|
-
settings = settings.stringify_keys
|
111
|
-
cache_variable("system_info", settings)
|
112
|
-
rescue
|
113
|
-
end
|
90
|
+
# custom settings
|
91
|
+
settings["key"] = "system"
|
92
|
+
settings["path"] = ''
|
93
|
+
settings["kind"] = "system"
|
94
|
+
settings["hooks"]["on_notification"] = (settings["hooks"]["on_notification"] || []) + ["admin_system_notifications"]
|
95
|
+
cache_variable("statis_system_info", settings)
|
114
96
|
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
# return the main site
|
119
|
-
def self.main_site
|
120
|
-
@@main_site ||= get_sites.first rescue nil
|
121
|
-
end
|
122
|
-
|
123
|
-
# update a system value
|
124
|
-
# key: attribute name
|
125
|
-
# value: new value for attribute
|
126
|
-
def self.system_info_set(key, val)
|
127
|
-
s = main_site
|
128
|
-
settings = s.get_meta("main_settings", {}).stringify_keys
|
129
|
-
settings[key] = val
|
130
|
-
s.set_meta("main_settings", settings)
|
131
|
-
class_variable_set("@@cache_system_info", nil)
|
132
|
-
val
|
97
|
+
alias_method :system_info, :static_system_info
|
133
98
|
end
|
134
99
|
|
135
100
|
# reload routes
|
136
101
|
def self.reload
|
137
102
|
@@all_sites = nil
|
138
|
-
@@main_site = nil
|
139
103
|
@@_vars.each { |v| class_variable_set("@@cache_#{v}", nil) }
|
140
104
|
Rails.application.reload_routes!
|
141
105
|
end
|
@@ -255,6 +219,17 @@ class PluginRoutes
|
|
255
219
|
cache_variable("site_all_locales", res.uniq.join("|"))
|
256
220
|
end
|
257
221
|
|
222
|
+
# return all locales for translated routes
|
223
|
+
def self.all_locales_for_routes
|
224
|
+
r = cache_variable("all_locales_for_routes"); return r unless r.nil?
|
225
|
+
res = {}
|
226
|
+
all_locales.split("|").each do |l|
|
227
|
+
res[l] = "_#{l}"
|
228
|
+
end
|
229
|
+
res[false] = ''
|
230
|
+
cache_variable("all_locales_for_routes", res)
|
231
|
+
end
|
232
|
+
|
258
233
|
# return apps directory path
|
259
234
|
def self.apps_dir
|
260
235
|
Rails.root.join("app", "apps").to_s
|
@@ -0,0 +1,18 @@
|
|
1
|
+
namespace :camaleon_cms do
|
2
|
+
desc 'Generate thumbnails for uploaded files'
|
3
|
+
task generate_thumbnails: :environment do
|
4
|
+
include CamaleonCms::CamaleonHelper
|
5
|
+
include CamaleonCms::HooksHelper
|
6
|
+
include CamaleonCms::SiteHelper
|
7
|
+
include CamaleonCms::PluginsHelper
|
8
|
+
include CamaleonCms::ThemeHelper
|
9
|
+
include CamaleonCms::UploaderHelper
|
10
|
+
include Rails.application.routes.url_helpers
|
11
|
+
$current_site = CamaleonCms::Site.find(ENV['site_id'].to_i)
|
12
|
+
cama_uploader_init_connection
|
13
|
+
@fog_connection_bucket_dir.files.all.each do |file|
|
14
|
+
puts file.inspect
|
15
|
+
cama_uploader_generate_thumbnail(file.key, file.key, "")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -9,9 +9,12 @@ namespace :camaleon_cms do
|
|
9
9
|
# end
|
10
10
|
# After run: rails generate rspec:install, support folder
|
11
11
|
# copy rails helper, rspec_helper,
|
12
|
-
task :rspec => :environment do
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
task :rspec, [:file] => :environment do |task, args|
|
13
|
+
if args.file.present?
|
14
|
+
puts "************* running: #{"rspec #{File.join($camaleon_engine_dir, args.file)}"}"
|
15
|
+
system("rspec #{File.join($camaleon_engine_dir, args.file)}")
|
16
|
+
else
|
17
|
+
Dir[File.join($camaleon_engine_dir, "spec", "features", "*.rb")].each{|p| system("rspec #{p}") }
|
18
|
+
end
|
16
19
|
end
|
17
20
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camaleon_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.1
|
4
|
+
version: 2.1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Owen Peredo Diaz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcrypt
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: tinymce-rails
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '4.3'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '4.3'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: protected_attributes
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,20 +206,6 @@ dependencies:
|
|
192
206
|
- - "~>"
|
193
207
|
- !ruby/object:Gem::Version
|
194
208
|
version: '2'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: rspec
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
209
|
description: Camaleon CMS is a dynamic and advanced content management system based
|
210
210
|
on Ruby on Rails 4 as an alternative to Wordpress.
|
211
211
|
email:
|
@@ -372,8 +372,11 @@ files:
|
|
372
372
|
- app/assets/images/camaleon_cms/language/es.png
|
373
373
|
- app/assets/images/camaleon_cms/language/fr.png
|
374
374
|
- app/assets/images/camaleon_cms/language/it.png
|
375
|
+
- app/assets/images/camaleon_cms/language/nl.png
|
376
|
+
- app/assets/images/camaleon_cms/language/pl.png
|
375
377
|
- app/assets/images/camaleon_cms/language/pt.png
|
376
378
|
- app/assets/images/camaleon_cms/language/pt_br.png
|
379
|
+
- app/assets/images/camaleon_cms/language/ru.png
|
377
380
|
- app/assets/images/camaleon_cms/language/zh.png
|
378
381
|
- app/assets/images/camaleon_cms/loader.gif
|
379
382
|
- app/assets/images/camaleon_cms/users/no-image.jpg
|
@@ -393,7 +396,6 @@ files:
|
|
393
396
|
- app/assets/javascripts/camaleon_cms/admin/admin-manifest.js
|
394
397
|
- app/assets/javascripts/camaleon_cms/admin/bootstrap-colorpicker.js
|
395
398
|
- app/assets/javascripts/camaleon_cms/admin/bootstrap-datepicker.js
|
396
|
-
- app/assets/javascripts/camaleon_cms/admin/bootstrap-datetimepicker.min.js
|
397
399
|
- app/assets/javascripts/camaleon_cms/admin/bootstrap-select.js
|
398
400
|
- app/assets/javascripts/camaleon_cms/admin/custom_fields_form.js
|
399
401
|
- app/assets/javascripts/camaleon_cms/admin/form-builder/formbuilder.js
|
@@ -406,52 +408,35 @@ files:
|
|
406
408
|
- app/assets/javascripts/camaleon_cms/admin/jquery.validate.js
|
407
409
|
- app/assets/javascripts/camaleon_cms/admin/jquery_validate/es.js
|
408
410
|
- app/assets/javascripts/camaleon_cms/admin/jquery_validate/it.js
|
411
|
+
- app/assets/javascripts/camaleon_cms/admin/jquery_validate/nl.js
|
409
412
|
- app/assets/javascripts/camaleon_cms/admin/jquery_validate/pt_br.js
|
410
413
|
- app/assets/javascripts/camaleon_cms/admin/login.js.coffee
|
411
414
|
- app/assets/javascripts/camaleon_cms/admin/login_manifest.js
|
412
415
|
- app/assets/javascripts/camaleon_cms/admin/lte/app.js
|
416
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/_moment.js
|
417
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/ar.js
|
418
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/ca.js
|
419
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/de.js
|
420
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/es.js
|
421
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/fr.js
|
422
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/it.js
|
423
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/ja.js
|
424
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/nl.js
|
425
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/pl.js
|
426
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/pt.js
|
427
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/pt_br.js
|
428
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/ru.js
|
429
|
+
- app/assets/javascripts/camaleon_cms/admin/momentjs/zh.js
|
413
430
|
- app/assets/javascripts/camaleon_cms/admin/nav-menu.js
|
414
|
-
- app/assets/javascripts/camaleon_cms/admin/plugins.js
|
415
431
|
- app/assets/javascripts/camaleon_cms/admin/tageditor/_jquery.caret.min.js
|
416
432
|
- app/assets/javascripts/camaleon_cms/admin/tageditor/_jquery.tag-editor.js
|
417
433
|
- app/assets/javascripts/camaleon_cms/admin/tinymce/langs/en.js
|
418
434
|
- app/assets/javascripts/camaleon_cms/admin/tinymce/langs/es.js
|
419
435
|
- app/assets/javascripts/camaleon_cms/admin/tinymce/langs/it.js
|
436
|
+
- app/assets/javascripts/camaleon_cms/admin/tinymce/langs/nl.js
|
420
437
|
- app/assets/javascripts/camaleon_cms/admin/tinymce/langs/pt_br.js
|
421
438
|
- app/assets/javascripts/camaleon_cms/admin/tinymce/langs/readme.md
|
422
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-cool.gif
|
423
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-cry.gif
|
424
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-embarassed.gif
|
425
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif
|
426
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-frown.gif
|
427
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-innocent.gif
|
428
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-kiss.gif
|
429
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-laughing.gif
|
430
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-money-mouth.gif
|
431
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-sealed.gif
|
432
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-smile.gif
|
433
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-surprised.gif
|
434
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-tongue-out.gif
|
435
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-undecided.gif
|
436
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-wink.gif
|
437
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/emoticons/img/smiley-yell.gif
|
438
439
|
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/filemanager/plugin.min.js
|
439
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/plugins/visualblocks/css/visualblocks.css
|
440
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/content.min.css.scss
|
441
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.eot
|
442
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.svg
|
443
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.ttf
|
444
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce-small.woff
|
445
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.eot
|
446
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.svg
|
447
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.ttf
|
448
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/fonts/tinymce.woff
|
449
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/anchor.gif
|
450
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/loader.gif
|
451
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/object.gif
|
452
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/skins/lightgray/img/trans.gif
|
453
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/themes/modern/theme.min.js
|
454
|
-
- app/assets/javascripts/camaleon_cms/admin/tinymce/tinymce.min.js
|
455
440
|
- app/assets/javascripts/camaleon_cms/admin/uploader/_jquery.form.js
|
456
441
|
- app/assets/javascripts/camaleon_cms/admin/uploader/_jquery.uploadfile.min.js
|
457
442
|
- app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee
|
@@ -464,7 +449,6 @@ files:
|
|
464
449
|
- app/assets/stylesheets/camaleon_cms/admin/admin-basic-manifest.css
|
465
450
|
- app/assets/stylesheets/camaleon_cms/admin/admin-manifest.css
|
466
451
|
- app/assets/stylesheets/camaleon_cms/admin/bootstrap-datepicker.css.scss
|
467
|
-
- app/assets/stylesheets/camaleon_cms/admin/bootstrap-datetimepicker.css.scss
|
468
452
|
- app/assets/stylesheets/camaleon_cms/admin/colorpicker.css.scss
|
469
453
|
- app/assets/stylesheets/camaleon_cms/admin/cropper/cropper.min.css
|
470
454
|
- app/assets/stylesheets/camaleon_cms/admin/form-builder/formbuilder.css
|
@@ -757,6 +741,7 @@ files:
|
|
757
741
|
- app/views/camaleon_cms/default_theme/sitemap.xml.builder
|
758
742
|
- app/views/camaleon_cms/html_mailer/confirm_email.html.erb
|
759
743
|
- app/views/camaleon_cms/html_mailer/mailer.html.erb
|
744
|
+
- app/views/camaleon_cms/html_mailer/password_reset.html.erb
|
760
745
|
- app/views/camaleon_cms/shortcode_templates/widget.html.erb
|
761
746
|
- app/views/layouts/camaleon_cms/admin.html.erb
|
762
747
|
- app/views/layouts/camaleon_cms/admin/_ajax.html.erb
|
@@ -774,13 +759,16 @@ files:
|
|
774
759
|
- config/initializers/assets.rb
|
775
760
|
- config/initializers/custom_initializers.rb
|
776
761
|
- config/initializers/mobu.rb
|
762
|
+
- config/initializers/model_alias.rb
|
777
763
|
- config/initializers/sass.rb
|
778
764
|
- config/locales/ar.yml
|
779
765
|
- config/locales/camaleon_cms/admin/en.yml
|
780
766
|
- config/locales/camaleon_cms/admin/es.yml
|
781
767
|
- config/locales/camaleon_cms/admin/it.yml
|
782
768
|
- config/locales/camaleon_cms/admin/js.yml
|
769
|
+
- config/locales/camaleon_cms/admin/nl.yml
|
783
770
|
- config/locales/camaleon_cms/admin/pt_br.yml
|
771
|
+
- config/locales/camaleon_cms/admin/ru.yml
|
784
772
|
- config/locales/camaleon_cms/common.yml
|
785
773
|
- config/locales/camaleon_cms/languages.yml
|
786
774
|
- config/locales/camaleon_cms/routes.yml
|
@@ -789,6 +777,7 @@ files:
|
|
789
777
|
- config/locales/es.yml
|
790
778
|
- config/locales/fr.yml
|
791
779
|
- config/locales/it.yml
|
780
|
+
- config/locales/nl.yml
|
792
781
|
- config/locales/pl.yml
|
793
782
|
- config/locales/pt-BR.yml
|
794
783
|
- config/locales/ru.yml
|
@@ -829,7 +818,7 @@ files:
|
|
829
818
|
- lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/front/index.html.erb
|
830
819
|
- lib/generators/camaleon_cms/gem_plugin_template/app/views/plugins/my_plugin/layouts/readme.txt
|
831
820
|
- lib/generators/camaleon_cms/gem_plugin_template/config/camaleon_plugin.json
|
832
|
-
- lib/generators/camaleon_cms/gem_plugin_template/config/custom_models.rb
|
821
|
+
- lib/generators/camaleon_cms/gem_plugin_template/config/initializers/custom_models.rb
|
833
822
|
- lib/generators/camaleon_cms/gem_theme_generator.rb
|
834
823
|
- lib/generators/camaleon_cms/gem_theme_template/app/assets/images/themes/my_plugin/image.png
|
835
824
|
- lib/generators/camaleon_cms/gem_theme_template/app/assets/javascripts/themes/my_plugin/main.js
|
@@ -856,6 +845,7 @@ files:
|
|
856
845
|
- lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/views/layouts/index.html.erb
|
857
846
|
- lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/views/partials/readme.txt
|
858
847
|
- lib/plugin_routes.rb
|
848
|
+
- lib/tasks/camaleon_cms/camaleon_tasks.rake
|
859
849
|
- lib/tasks/camaleon_cms/rspec_test.rake
|
860
850
|
homepage: http://camaleon.tuzitio.com
|
861
851
|
licenses:
|
@@ -880,9 +870,8 @@ requirements:
|
|
880
870
|
- ruby >= 1.9.3
|
881
871
|
- imagemagick
|
882
872
|
rubyforge_project:
|
883
|
-
rubygems_version: 2.
|
873
|
+
rubygems_version: 2.5.1
|
884
874
|
signing_key:
|
885
875
|
specification_version: 4
|
886
876
|
summary: Camaleon is a cms for Ruby on Rails 4 as an alternative to wordpress.
|
887
877
|
test_files: []
|
888
|
-
has_rdoc:
|
@@ -1,26 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @license
|
3
|
-
* =========================================================
|
4
|
-
* bootstrap-datetimepicker.js
|
5
|
-
* http://www.eyecon.ro/bootstrap-datepicker
|
6
|
-
* =========================================================
|
7
|
-
* Copyright 2012 Stefan Petre
|
8
|
-
*
|
9
|
-
* Contributions:
|
10
|
-
* - Andrew Rowls
|
11
|
-
* - Thiago de Arruda
|
12
|
-
*
|
13
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
14
|
-
* you may not use this file except in compliance with the License.
|
15
|
-
* You may obtain a copy of the License at
|
16
|
-
*
|
17
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
18
|
-
*
|
19
|
-
* Unless required by applicable law or agreed to in writing, software
|
20
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
21
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
22
|
-
* See the License for the specific language governing permissions and
|
23
|
-
* limitations under the License.
|
24
|
-
* =========================================================
|
25
|
-
*/
|
26
|
-
(function($){var smartPhone=window.orientation!=undefined;var DateTimePicker=function(element,options){this.id=dpgId++;this.init(element,options)};var dateToDate=function(dt){if(typeof dt==="string"){return new Date(dt)}return dt};DateTimePicker.prototype={constructor:DateTimePicker,init:function(element,options){var icon;if(!(options.pickTime||options.pickDate))throw new Error("Must choose at least one picker");this.options=options;this.$element=$(element);this.language=options.language in dates?options.language:"en";this.pickDate=options.pickDate;this.pickTime=options.pickTime;this.isInput=this.$element.is("input");this.component=false;if(this.$element.find(".input-append")||this.$element.find(".input-prepend"))this.component=this.$element.find(".add-on");this.format=options.format;if(!this.format){if(this.isInput)this.format=this.$element.data("format");else this.format=this.$element.find("input").data("format");if(!this.format)this.format="MM/dd/yyyy"}this._compileFormat();if(this.component){icon=this.component.find("i")}if(this.pickTime){if(icon&&icon.length)this.timeIcon=icon.data("time-icon");if(!this.timeIcon)this.timeIcon="icon-time";icon.addClass(this.timeIcon)}if(this.pickDate){if(icon&&icon.length)this.dateIcon=icon.data("date-icon");if(!this.dateIcon)this.dateIcon="icon-calendar";icon.removeClass(this.timeIcon);icon.addClass(this.dateIcon)}this.widget=$(getTemplate(this.timeIcon,options.pickDate,options.pickTime,options.pick12HourFormat,options.pickSeconds,options.collapse)).appendTo("body");this.minViewMode=options.minViewMode||this.$element.data("date-minviewmode")||0;if(typeof this.minViewMode==="string"){switch(this.minViewMode){case"months":this.minViewMode=1;break;case"years":this.minViewMode=2;break;default:this.minViewMode=0;break}}this.viewMode=options.viewMode||this.$element.data("date-viewmode")||0;if(typeof this.viewMode==="string"){switch(this.viewMode){case"months":this.viewMode=1;break;case"years":this.viewMode=2;break;default:this.viewMode=0;break}}this.startViewMode=this.viewMode;this.weekStart=options.weekStart||this.$element.data("date-weekstart")||0;this.weekEnd=this.weekStart===0?6:this.weekStart-1;this.setStartDate(options.startDate||this.$element.data("date-startdate"));this.setEndDate(options.endDate||this.$element.data("date-enddate"));this.fillDow();this.fillMonths();this.fillHours();this.fillMinutes();this.fillSeconds();this.update();this.showMode();this._attachDatePickerEvents()},show:function(e){this.widget.show();this.height=this.component?this.component.outerHeight():this.$element.outerHeight();this.place();this.$element.trigger({type:"show",date:this._date});this._attachDatePickerGlobalEvents();if(e){e.stopPropagation();e.preventDefault()}},disable:function(){this.$element.find("input").prop("disabled",true);this._detachDatePickerEvents()},enable:function(){this.$element.find("input").prop("disabled",false);this._attachDatePickerEvents()},hide:function(){var collapse=this.widget.find(".collapse");for(var i=0;i<collapse.length;i++){var collapseData=collapse.eq(i).data("collapse");if(collapseData&&collapseData.transitioning)return}this.widget.hide();this.viewMode=this.startViewMode;this.showMode();this.set();this.$element.trigger({type:"hide",date:this._date});this._detachDatePickerGlobalEvents()},set:function(){var formatted="";if(!this._unset)formatted=this.formatDate(this._date);if(!this.isInput){if(this.component){var input=this.$element.find("input");input.val(formatted);this._resetMaskPos(input)}this.$element.data("date",formatted)}else{this.$element.val(formatted);this._resetMaskPos(this.$element)}},setValue:function(newDate){if(!newDate){this._unset=true}else{this._unset=false}if(typeof newDate==="string"){this._date=this.parseDate(newDate)}else if(newDate){this._date=new Date(newDate)}this.set();this.viewDate=UTCDate(this._date.getUTCFullYear(),this._date.getUTCMonth(),1,0,0,0,0);this.fillDate();this.fillTime()},getDate:function(){if(this._unset)return null;return new Date(this._date.valueOf())},setDate:function(date){if(!date)this.setValue(null);else this.setValue(date.valueOf())},setStartDate:function(date){if(date instanceof Date){this.startDate=date}else if(typeof date==="string"){this.startDate=new UTCDate(date);if(!this.startDate.getUTCFullYear()){this.startDate=-Infinity}}else{this.startDate=-Infinity}if(this.viewDate){this.update()}},setEndDate:function(date){if(date instanceof Date){this.endDate=date}else if(typeof date==="string"){this.endDate=new UTCDate(date);if(!this.endDate.getUTCFullYear()){this.endDate=Infinity}}else{this.endDate=Infinity}if(this.viewDate){this.update()}},getLocalDate:function(){if(this._unset)return null;var d=this._date;return new Date(d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds(),d.getUTCMilliseconds())},setLocalDate:function(localDate){if(!localDate)this.setValue(null);else this.setValue(Date.UTC(localDate.getFullYear(),localDate.getMonth(),localDate.getDate(),localDate.getHours(),localDate.getMinutes(),localDate.getSeconds(),localDate.getMilliseconds()))},place:function(){var position="absolute";var offset=this.component?this.component.offset():this.$element.offset();this.width=this.component?this.component.outerWidth():this.$element.outerWidth();offset.top=offset.top+this.height;var $window=$(window);if(this.options.width!=undefined){this.widget.width(this.options.width)}if(this.options.orientation=="left"){this.widget.addClass("left-oriented");offset.left=offset.left-this.widget.width()+20}if(this._isInFixed()){position="fixed";offset.top-=$window.scrollTop();offset.left-=$window.scrollLeft()}if($window.width()<offset.left+this.widget.outerWidth()){offset.right=$window.width()-offset.left-this.width;offset.left="auto";this.widget.addClass("pull-right")}else{offset.right="auto";this.widget.removeClass("pull-right")}this.widget.css({position:position,top:offset.top,left:offset.left,right:offset.right})},notifyChange:function(){this.$element.trigger({type:"changeDate",date:this.getDate(),localDate:this.getLocalDate()})},update:function(newDate){var dateStr=newDate;if(!dateStr){if(this.isInput){dateStr=this.$element.val()}else{dateStr=this.$element.find("input").val()}if(dateStr){this._date=this.parseDate(dateStr)}if(!this._date){var tmp=new Date;this._date=UTCDate(tmp.getFullYear(),tmp.getMonth(),tmp.getDate(),tmp.getHours(),tmp.getMinutes(),tmp.getSeconds(),tmp.getMilliseconds())}}this.viewDate=UTCDate(this._date.getUTCFullYear(),this._date.getUTCMonth(),1,0,0,0,0);this.fillDate();this.fillTime()},fillDow:function(){var dowCnt=this.weekStart;var html=$("<tr>");while(dowCnt<this.weekStart+7){html.append('<th class="dow">'+dates[this.language].daysMin[dowCnt++%7]+"</th>")}this.widget.find(".datepicker-days thead").append(html)},fillMonths:function(){var html="";var i=0;while(i<12){html+='<span class="month">'+dates[this.language].monthsShort[i++]+"</span>"}this.widget.find(".datepicker-months td").append(html)},fillDate:function(){var year=this.viewDate.getUTCFullYear();var month=this.viewDate.getUTCMonth();var currentDate=UTCDate(this._date.getUTCFullYear(),this._date.getUTCMonth(),this._date.getUTCDate(),0,0,0,0);var startYear=typeof this.startDate==="object"?this.startDate.getUTCFullYear():-Infinity;var startMonth=typeof this.startDate==="object"?this.startDate.getUTCMonth():-1;var endYear=typeof this.endDate==="object"?this.endDate.getUTCFullYear():Infinity;var endMonth=typeof this.endDate==="object"?this.endDate.getUTCMonth():12;this.widget.find(".datepicker-days").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-months").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-years").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-days th:eq(1)").text(dates[this.language].months[month]+" "+year);var prevMonth=UTCDate(year,month-1,28,0,0,0,0);var day=DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(),prevMonth.getUTCMonth());prevMonth.setUTCDate(day);prevMonth.setUTCDate(day-(prevMonth.getUTCDay()-this.weekStart+7)%7);if(year==startYear&&month<=startMonth||year<startYear){this.widget.find(".datepicker-days th:eq(0)").addClass("disabled")}if(year==endYear&&month>=endMonth||year>endYear){this.widget.find(".datepicker-days th:eq(2)").addClass("disabled")}var nextMonth=new Date(prevMonth.valueOf());nextMonth.setUTCDate(nextMonth.getUTCDate()+42);nextMonth=nextMonth.valueOf();var html=[];var row;var clsName;while(prevMonth.valueOf()<nextMonth){if(prevMonth.getUTCDay()===this.weekStart){row=$("<tr>");html.push(row)}clsName="";if(prevMonth.getUTCFullYear()<year||prevMonth.getUTCFullYear()==year&&prevMonth.getUTCMonth()<month){clsName+=" old"}else if(prevMonth.getUTCFullYear()>year||prevMonth.getUTCFullYear()==year&&prevMonth.getUTCMonth()>month){clsName+=" new"}if(prevMonth.valueOf()===currentDate.valueOf()){clsName+=" active"}if(prevMonth.valueOf()+864e5<=this.startDate){clsName+=" disabled"}if(prevMonth.valueOf()>this.endDate){clsName+=" disabled"}row.append('<td class="day'+clsName+'">'+prevMonth.getUTCDate()+"</td>");prevMonth.setUTCDate(prevMonth.getUTCDate()+1)}this.widget.find(".datepicker-days tbody").empty().append(html);var currentYear=this._date.getUTCFullYear();var months=this.widget.find(".datepicker-months").find("th:eq(1)").text(year).end().find("span").removeClass("active");if(currentYear===year){months.eq(this._date.getUTCMonth()).addClass("active")}if(currentYear-1<startYear){this.widget.find(".datepicker-months th:eq(0)").addClass("disabled")}if(currentYear+1>endYear){this.widget.find(".datepicker-months th:eq(2)").addClass("disabled")}for(var i=0;i<12;i++){if(year==startYear&&startMonth>i||year<startYear){$(months[i]).addClass("disabled")}else if(year==endYear&&endMonth<i||year>endYear){$(months[i]).addClass("disabled")}}html="";year=parseInt(year/10,10)*10;var yearCont=this.widget.find(".datepicker-years").find("th:eq(1)").text(year+"-"+(year+9)).end().find("td");this.widget.find(".datepicker-years").find("th").removeClass("disabled");if(startYear>year){this.widget.find(".datepicker-years").find("th:eq(0)").addClass("disabled")}if(endYear<year+9){this.widget.find(".datepicker-years").find("th:eq(2)").addClass("disabled")}year-=1;for(var i=-1;i<11;i++){html+='<span class="year'+(i===-1||i===10?" old":"")+(currentYear===year?" active":"")+(year<startYear||year>endYear?" disabled":"")+'">'+year+"</span>";year+=1}yearCont.html(html)},fillHours:function(){var table=this.widget.find(".timepicker .timepicker-hours table");table.parent().hide();var html="";if(this.options.pick12HourFormat){var current=1;for(var i=0;i<3;i+=1){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="hour">'+padLeft(c,2,"0")+"</td>";current++}html+="</tr>"}}else{var current=0;for(var i=0;i<6;i+=1){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="hour">'+padLeft(c,2,"0")+"</td>";current++}html+="</tr>"}}table.html(html)},fillMinutes:function(){var table=this.widget.find(".timepicker .timepicker-minutes table");table.parent().hide();var html="";var current=0;for(var i=0;i<5;i++){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="minute">'+padLeft(c,2,"0")+"</td>";current+=3}html+="</tr>"}table.html(html)},fillSeconds:function(){var table=this.widget.find(".timepicker .timepicker-seconds table");table.parent().hide();var html="";var current=0;for(var i=0;i<5;i++){html+="<tr>";for(var j=0;j<4;j+=1){var c=current.toString();html+='<td class="second">'+padLeft(c,2,"0")+"</td>";current+=3}html+="</tr>"}table.html(html)},fillTime:function(){if(!this._date)return;var timeComponents=this.widget.find(".timepicker span[data-time-component]");var table=timeComponents.closest("table");var is12HourFormat=this.options.pick12HourFormat;var hour=this._date.getUTCHours();var period="AM";if(is12HourFormat){if(hour>=12)period="PM";if(hour===0)hour=12;else if(hour!=12)hour=hour%12;this.widget.find(".timepicker [data-action=togglePeriod]").text(period)}hour=padLeft(hour.toString(),2,"0");var minute=padLeft(this._date.getUTCMinutes().toString(),2,"0");var second=padLeft(this._date.getUTCSeconds().toString(),2,"0");timeComponents.filter("[data-time-component=hours]").text(hour);timeComponents.filter("[data-time-component=minutes]").text(minute);timeComponents.filter("[data-time-component=seconds]").text(second)},click:function(e){e.stopPropagation();e.preventDefault();this._unset=false;var target=$(e.target).closest("span, td, th");if(target.length===1){if(!target.is(".disabled")){switch(target[0].nodeName.toLowerCase()){case"th":switch(target[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var vd=this.viewDate;var navFnc=DPGlobal.modes[this.viewMode].navFnc;var step=DPGlobal.modes[this.viewMode].navStep;if(target[0].className==="prev")step=step*-1;vd["set"+navFnc](vd["get"+navFnc]()+step);this.fillDate();this.set();break}break;case"span":if(target.is(".month")){var month=target.parent().find("span").index(target);this.viewDate.setUTCMonth(month)}else{var year=parseInt(target.text(),10)||0;this.viewDate.setUTCFullYear(year)}if(this.viewMode!==0){this._date=UTCDate(this.viewDate.getUTCFullYear(),this.viewDate.getUTCMonth(),this.viewDate.getUTCDate(),this._date.getUTCHours(),this._date.getUTCMinutes(),this._date.getUTCSeconds(),this._date.getUTCMilliseconds());this.notifyChange()}this.showMode(-1);this.fillDate();this.set();break;case"td":if(target.is(".day")){var day=parseInt(target.text(),10)||1;var month=this.viewDate.getUTCMonth();var year=this.viewDate.getUTCFullYear();if(target.is(".old")){if(month===0){month=11;year-=1}else{month-=1}}else if(target.is(".new")){if(month==11){month=0;year+=1}else{month+=1}}this._date=UTCDate(year,month,day,this._date.getUTCHours(),this._date.getUTCMinutes(),this._date.getUTCSeconds(),this._date.getUTCMilliseconds());this.viewDate=UTCDate(year,month,Math.min(28,day),0,0,0,0);this.fillDate();this.set();this.notifyChange()}break}}}},actions:{incrementHours:function(e){this._date.setUTCHours(this._date.getUTCHours()+1)},incrementMinutes:function(e){this._date.setUTCMinutes(this._date.getUTCMinutes()+1)},incrementSeconds:function(e){this._date.setUTCSeconds(this._date.getUTCSeconds()+1)},decrementHours:function(e){this._date.setUTCHours(this._date.getUTCHours()-1)},decrementMinutes:function(e){this._date.setUTCMinutes(this._date.getUTCMinutes()-1)},decrementSeconds:function(e){this._date.setUTCSeconds(this._date.getUTCSeconds()-1)},togglePeriod:function(e){var hour=this._date.getUTCHours();if(hour>=12)hour-=12;else hour+=12;this._date.setUTCHours(hour)},showPicker:function(){this.widget.find(".timepicker > div:not(.timepicker-picker)").hide();this.widget.find(".timepicker .timepicker-picker").show()},showHours:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-hours").show()},showMinutes:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-seconds").show()},selectHour:function(e){var tgt=$(e.target);var value=parseInt(tgt.text(),10);if(this.options.pick12HourFormat){var current=this._date.getUTCHours();if(current>=12){if(value!=12)value=(value+12)%24}else{if(value===12)value=0;else value=value%12}}this._date.setUTCHours(value);this.actions.showPicker.call(this)},selectMinute:function(e){var tgt=$(e.target);var value=parseInt(tgt.text(),10);this._date.setUTCMinutes(value);this.actions.showPicker.call(this)},selectSecond:function(e){var tgt=$(e.target);var value=parseInt(tgt.text(),10);this._date.setUTCSeconds(value);this.actions.showPicker.call(this)}},doAction:function(e){e.stopPropagation();e.preventDefault();if(!this._date)this._date=UTCDate(1970,0,0,0,0,0,0);var action=$(e.currentTarget).data("action");var rv=this.actions[action].apply(this,arguments);this.set();this.fillTime();this.notifyChange();return rv},stopEvent:function(e){e.stopPropagation();e.preventDefault()},keydown:function(e){var self=this,k=e.which,input=$(e.target);if(k==8||k==46){setTimeout(function(){self._resetMaskPos(input)})}},keypress:function(e){var k=e.which;if(k==8||k==46){return}var input=$(e.target);var c=String.fromCharCode(k);var val=input.val()||"";val+=c;var mask=this._mask[this._maskPos];if(!mask){return false}if(mask.end!=val.length){return}if(!mask.pattern.test(val.slice(mask.start))){val=val.slice(0,val.length-1);while((mask=this._mask[this._maskPos])&&mask.character){val+=mask.character;this._maskPos++}val+=c;if(mask.end!=val.length){input.val(val);return false}else{if(!mask.pattern.test(val.slice(mask.start))){input.val(val.slice(0,mask.start));return false}else{input.val(val);this._maskPos++;return false}}}else{this._maskPos++}},change:function(e){var input=$(e.target);var val=input.val();if(this._formatPattern.test(val)){this.update();this.setValue(this._date.getTime());this.notifyChange();this.set()}else if(val&&val.trim()){this.setValue(this._date.getTime());if(this._date)this.set();else input.val("")}else{if(this._date){this.setValue(null);this.notifyChange();this._unset=true}}this._resetMaskPos(input)},showMode:function(dir){if(dir){this.viewMode=Math.max(this.minViewMode,Math.min(2,this.viewMode+dir))}this.widget.find(".datepicker > div").hide().filter(".datepicker-"+DPGlobal.modes[this.viewMode].clsName).show()},destroy:function(){this._detachDatePickerEvents();this._detachDatePickerGlobalEvents();this.widget.remove();this.$element.removeData("datetimepicker");this.component.removeData("datetimepicker")},formatDate:function(d){return this.format.replace(formatReplacer,function(match){var methodName,property,rv,len=match.length;if(match==="ms")len=1;property=dateFormatComponents[match].property;if(property==="Hours12"){rv=d.getUTCHours();if(rv===0)rv=12;else if(rv!==12)rv=rv%12}else if(property==="Period12"){if(d.getUTCHours()>=12)return"PM";else return"AM"}else{methodName="get"+property;rv=d[methodName]()}if(methodName==="getUTCMonth")rv=rv+1;if(methodName==="getUTCYear")rv=rv+1900-2e3;return padLeft(rv.toString(),len,"0")})},parseDate:function(str){var match,i,property,methodName,value,parsed={};if(!(match=this._formatPattern.exec(str)))return null;for(i=1;i<match.length;i++){property=this._propertiesByIndex[i];if(!property)continue;value=match[i];if(/^\d+$/.test(value))value=parseInt(value,10);parsed[property]=value}return this._finishParsingDate(parsed)},_resetMaskPos:function(input){var val=input.val();for(var i=0;i<this._mask.length;i++){if(this._mask[i].end>val.length){this._maskPos=i;break}else if(this._mask[i].end===val.length){this._maskPos=i+1;break}}},_finishParsingDate:function(parsed){var year,month,date,hours,minutes,seconds,milliseconds;year=parsed.UTCFullYear;if(parsed.UTCYear)year=2e3+parsed.UTCYear;if(!year)year=1970;if(parsed.UTCMonth)month=parsed.UTCMonth-1;else month=0;date=parsed.UTCDate||1;hours=parsed.UTCHours||0;minutes=parsed.UTCMinutes||0;seconds=parsed.UTCSeconds||0;milliseconds=parsed.UTCMilliseconds||0;if(parsed.Hours12){hours=parsed.Hours12}if(parsed.Period12){if(/pm/i.test(parsed.Period12)){if(hours!=12)hours=(hours+12)%24}else{hours=hours%12}}return UTCDate(year,month,date,hours,minutes,seconds,milliseconds)},_compileFormat:function(){var match,component,components=[],mask=[],str=this.format,propertiesByIndex={},i=0,pos=0;while(match=formatComponent.exec(str)){component=match[0];if(component in dateFormatComponents){i++;propertiesByIndex[i]=dateFormatComponents[component].property;components.push("\\s*"+dateFormatComponents[component].getPattern(this)+"\\s*");mask.push({pattern:new RegExp(dateFormatComponents[component].getPattern(this)),property:dateFormatComponents[component].property,start:pos,end:pos+=component.length})}else{components.push(escapeRegExp(component));mask.push({pattern:new RegExp(escapeRegExp(component)),character:component,start:pos,end:++pos})}str=str.slice(component.length)}this._mask=mask;this._maskPos=0;this._formatPattern=new RegExp("^\\s*"+components.join("")+"\\s*$");this._propertiesByIndex=propertiesByIndex},_attachDatePickerEvents:function(){var self=this;this.widget.on("click",".datepicker *",$.proxy(this.click,this));this.widget.on("click","[data-action]",$.proxy(this.doAction,this));this.widget.on("mousedown",$.proxy(this.stopEvent,this));if(this.pickDate&&this.pickTime){this.widget.on("click.togglePicker",".accordion-toggle",function(e){e.stopPropagation();var $this=$(this);var $parent=$this.closest("ul");var expanded=$parent.find(".collapse.in");var closed=$parent.find(".collapse:not(.in)");if(expanded&&expanded.length){var collapseData=expanded.data("collapse");if(collapseData&&collapseData.transitioning)return;expanded.collapse("hide");closed.collapse("show");$this.find("i").toggleClass(self.timeIcon+" "+self.dateIcon);self.$element.find(".add-on i").toggleClass(self.timeIcon+" "+self.dateIcon)}})}if(this.isInput){this.$element.on({focus:$.proxy(this.show,this),change:$.proxy(this.change,this)});if(this.options.maskInput){this.$element.on({keydown:$.proxy(this.keydown,this),keypress:$.proxy(this.keypress,this)})}}else{this.$element.on({change:$.proxy(this.change,this)},"input");if(this.options.maskInput){this.$element.on({keydown:$.proxy(this.keydown,this),keypress:$.proxy(this.keypress,this)},"input")}if(this.component){this.component.on("click",$.proxy(this.show,this))}else{this.$element.on("click",$.proxy(this.show,this))}}},_attachDatePickerGlobalEvents:function(){$(window).on("resize.datetimepicker"+this.id,$.proxy(this.place,this));if(!this.isInput){$(document).on("mousedown.datetimepicker"+this.id,$.proxy(this.hide,this))}},_detachDatePickerEvents:function(){this.widget.off("click",".datepicker *",this.click);this.widget.off("click","[data-action]");this.widget.off("mousedown",this.stopEvent);if(this.pickDate&&this.pickTime){this.widget.off("click.togglePicker")}if(this.isInput){this.$element.off({focus:this.show,change:this.change});if(this.options.maskInput){this.$element.off({keydown:this.keydown,keypress:this.keypress})}}else{this.$element.off({change:this.change},"input");if(this.options.maskInput){this.$element.off({keydown:this.keydown,keypress:this.keypress},"input")}if(this.component){this.component.off("click",this.show)}else{this.$element.off("click",this.show)}}},_detachDatePickerGlobalEvents:function(){$(window).off("resize.datetimepicker"+this.id);if(!this.isInput){$(document).off("mousedown.datetimepicker"+this.id)}},_isInFixed:function(){if(this.$element){var parents=this.$element.parents();var inFixed=false;for(var i=0;i<parents.length;i++){if($(parents[i]).css("position")=="fixed"){inFixed=true;break}}return inFixed}else{return false}}};$.fn.datetimepicker=function(option,val){return this.each(function(){var $this=$(this),data=$this.data("datetimepicker"),options=typeof option==="object"&&option;if(!data){$this.data("datetimepicker",data=new DateTimePicker(this,$.extend({},$.fn.datetimepicker.defaults,options)))}if(typeof option==="string")data[option](val)})};$.fn.datetimepicker.defaults={maskInput:false,pickDate:true,pickTime:true,pick12HourFormat:false,pickSeconds:true,startDate:-Infinity,endDate:Infinity,collapse:true};$.fn.datetimepicker.Constructor=DateTimePicker;var dpgId=0;var dates=$.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"]}};var dateFormatComponents={dd:{property:"UTCDate",getPattern:function(){return"(0?[1-9]|[1-2][0-9]|3[0-1])\\b"}},MM:{property:"UTCMonth",getPattern:function(){return"(0?[1-9]|1[0-2])\\b"}},yy:{property:"UTCYear",getPattern:function(){return"(\\d{2})\\b"}},yyyy:{property:"UTCFullYear",getPattern:function(){return"(\\d{4})\\b"}},hh:{property:"UTCHours",getPattern:function(){return"(0?[0-9]|1[0-9]|2[0-3])\\b"}},mm:{property:"UTCMinutes",getPattern:function(){return"(0?[0-9]|[1-5][0-9])\\b"}},ss:{property:"UTCSeconds",getPattern:function(){return"(0?[0-9]|[1-5][0-9])\\b"}},ms:{property:"UTCMilliseconds",getPattern:function(){return"([0-9]{1,3})\\b"}},HH:{property:"Hours12",getPattern:function(){return"(0?[1-9]|1[0-2])\\b"}},PP:{property:"Period12",getPattern:function(){return"(AM|PM|am|pm|Am|aM|Pm|pM)\\b"}}};var keys=[];for(var k in dateFormatComponents)keys.push(k);keys[keys.length-1]+="\\b";keys.push(".");var formatComponent=new RegExp(keys.join("\\b|"));keys.pop();var formatReplacer=new RegExp(keys.join("\\b|"),"g");function escapeRegExp(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function padLeft(s,l,c){if(l<s.length)return s;else return Array(l-s.length+1).join(c||" ")+s}function getTemplate(timeIcon,pickDate,pickTime,is12Hours,showSeconds,collapse){if(pickDate&&pickTime){return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+"<ul>"+"<li"+(collapse?' class="collapse in"':"")+">"+'<div class="datepicker">'+DPGlobal.template+"</div>"+"</li>"+'<li class="picker-switch accordion-toggle"><a><i class="'+timeIcon+'"></i></a></li>'+"<li"+(collapse?' class="collapse"':"")+">"+'<div class="timepicker">'+TPGlobal.getTemplate(is12Hours,showSeconds)+"</div>"+"</li>"+"</ul>"+"</div>"}else if(pickTime){return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+'<div class="timepicker">'+TPGlobal.getTemplate(is12Hours,showSeconds)+"</div>"+"</div>"}else{return'<div class="bootstrap-datetimepicker-widget dropdown-menu">'+'<div class="datepicker">'+DPGlobal.template+"</div>"+"</div>"}}function UTCDate(){return new Date(Date.UTC.apply(Date,arguments))}var DPGlobal={modes:[{clsName:"days",navFnc:"UTCMonth",navStep:1},{clsName:"months",navFnc:"UTCFullYear",navStep:1},{clsName:"years",navFnc:"UTCFullYear",navStep:10}],isLeapYear:function(year){return year%4===0&&year%100!==0||year%400===0},getDaysInMonth:function(year,month){return[31,DPGlobal.isLeapYear(year)?29:28,31,30,31,30,31,31,30,31,30,31][month]},headTemplate:"<thead>"+"<tr>"+'<th class="prev">‹</th>'+'<th colspan="5" class="switch"></th>'+'<th class="next">›</th>'+"</tr>"+"</thead>",contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>'};DPGlobal.template='<div class="datepicker-days">'+'<table class="table-condensed">'+DPGlobal.headTemplate+"<tbody></tbody>"+"</table>"+"</div>"+'<div class="datepicker-months">'+'<table class="table-condensed">'+DPGlobal.headTemplate+DPGlobal.contTemplate+"</table>"+"</div>"+'<div class="datepicker-years">'+'<table class="table-condensed">'+DPGlobal.headTemplate+DPGlobal.contTemplate+"</table>"+"</div>";var TPGlobal={hourTemplate:'<span data-action="showHours" data-time-component="hours" class="timepicker-hour"></span>',minuteTemplate:'<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>',secondTemplate:'<span data-action="showSeconds" data-time-component="seconds" class="timepicker-second"></span>'};TPGlobal.getTemplate=function(is12Hours,showSeconds){return'<div class="timepicker-picker">'+'<table class="table-condensed"'+(is12Hours?' data-hour-format="12"':"")+">"+"<tr>"+'<td><a href="#" class="btn" data-action="incrementHours"><i class="icon-chevron-up"></i></a></td>'+'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="incrementMinutes"><i class="icon-chevron-up"></i></a></td>'+(showSeconds?'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="incrementSeconds"><i class="icon-chevron-up"></i></a></td>':"")+(is12Hours?'<td class="separator"></td>':"")+"</tr>"+"<tr>"+"<td>"+TPGlobal.hourTemplate+"</td> "+'<td class="separator">:</td>'+"<td>"+TPGlobal.minuteTemplate+"</td> "+(showSeconds?'<td class="separator">:</td>'+"<td>"+TPGlobal.secondTemplate+"</td>":"")+(is12Hours?'<td class="separator"></td>'+"<td>"+'<button type="button" class="btn btn-primary" data-action="togglePeriod"></button>'+"</td>":"")+"</tr>"+"<tr>"+'<td><a href="#" class="btn" data-action="decrementHours"><i class="icon-chevron-down"></i></a></td>'+'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="decrementMinutes"><i class="icon-chevron-down"></i></a></td>'+(showSeconds?'<td class="separator"></td>'+'<td><a href="#" class="btn" data-action="decrementSeconds"><i class="icon-chevron-down"></i></a></td>':"")+(is12Hours?'<td class="separator"></td>':"")+"</tr>"+"</table>"+"</div>"+'<div class="timepicker-hours" data-action="selectHour">'+'<table class="table-condensed">'+"</table>"+"</div>"+'<div class="timepicker-minutes" data-action="selectMinute">'+'<table class="table-condensed">'+"</table>"+"</div>"+(showSeconds?'<div class="timepicker-seconds" data-action="selectSecond">'+'<table class="table-condensed">'+"</table>"+"</div>":"")}})(window.jQuery);
|