goldencobra 1.4.0 → 1.4.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. data/README.markdown +3 -2
  2. data/app/assets/images/goldencobra/Jcrop.gif +0 -0
  3. data/app/assets/javascripts/goldencobra/active_admin.js +145 -84
  4. data/app/assets/javascripts/goldencobra/jquery.Jcrop.min.js +22 -0
  5. data/app/assets/javascripts/goldencobra/jquery.color.js +661 -0
  6. data/app/assets/stylesheets/goldencobra/active_admin.css.scss +375 -252
  7. data/app/assets/stylesheets/goldencobra/{application.css → application.css.scss} +0 -0
  8. data/app/assets/stylesheets/goldencobra/ikusei_active_admin.scss +35 -26
  9. data/app/assets/stylesheets/goldencobra/jquery.Jcrop.min.css +29 -0
  10. data/app/controllers/goldencobra/api/v2/articles_controller.rb +221 -0
  11. data/app/controllers/goldencobra/api/v2/locales_controller.rb +31 -0
  12. data/app/controllers/goldencobra/api/v2/settings_controller.rb +31 -0
  13. data/app/controllers/goldencobra/articles_controller.rb +42 -16
  14. data/app/controllers/goldencobra/sessions_controller.rb +8 -1
  15. data/app/helpers/goldencobra/application_helper.rb +3 -1
  16. data/app/helpers/goldencobra/articles_helper.rb +14 -8
  17. data/app/middleware/goldencobra/handle_invalid_percent_encoding.rb +40 -0
  18. data/app/models/ability.rb +43 -48
  19. data/app/models/goldencobra/article.rb +292 -218
  20. data/app/models/goldencobra/article_author.rb +19 -0
  21. data/app/models/goldencobra/article_image.rb +2 -0
  22. data/app/models/goldencobra/articletype.rb +30 -28
  23. data/app/models/goldencobra/author.rb +5 -3
  24. data/app/models/goldencobra/domain.rb +2 -0
  25. data/app/models/goldencobra/import.rb +2 -2
  26. data/app/models/goldencobra/link_checker.rb +64 -0
  27. data/app/models/goldencobra/menue.rb +4 -2
  28. data/app/models/goldencobra/permission.rb +3 -1
  29. data/app/models/goldencobra/redirector.rb +131 -0
  30. data/app/models/goldencobra/setting.rb +29 -3
  31. data/app/models/goldencobra/upload.rb +60 -1
  32. data/app/models/goldencobra/url_builder.rb +58 -0
  33. data/app/models/goldencobra/vita.rb +4 -0
  34. data/app/models/goldencobra/widget.rb +10 -0
  35. data/app/models/user.rb +1 -1
  36. data/app/views/goldencobra/admin/articles/_article_type.html.erb +1 -1
  37. data/app/views/goldencobra/admin/articles/_articles_index.html.erb +3 -3
  38. data/app/views/goldencobra/admin/articles/_image_module_sidebar.html.erb +19 -7
  39. data/app/views/goldencobra/admin/articles/_layout_sidebar.html.erb +2 -2
  40. data/app/views/goldencobra/admin/articles/_link_checker.html.erb +4 -4
  41. data/app/views/goldencobra/admin/articles/_link_checker_index.html.erb +1 -1
  42. data/app/views/goldencobra/admin/articles/_select_article_type.html.erb +8 -8
  43. data/app/views/goldencobra/admin/articles/_sort_articles_index.html.erb +1 -1
  44. data/app/views/goldencobra/admin/articles/_widgets_sidebar.html.erb +2 -2
  45. data/app/views/goldencobra/admin/articles/toggle_expert_mode.js.erb +2 -2
  46. data/app/views/goldencobra/admin/settings/_index.html.erb +14 -0
  47. data/app/views/goldencobra/admin/settings/_key_value.html.erb +12 -0
  48. data/app/views/goldencobra/admin/settings/_settings_group.html.erb +14 -0
  49. data/app/views/goldencobra/admin/shared/_help.html.erb +12 -10
  50. data/app/views/goldencobra/admin/shared/_item.html.erb +4 -4
  51. data/app/views/goldencobra/admin/shared/_overview.html.erb +14 -4
  52. data/app/views/goldencobra/admin/shared/load_overviewtree.js.erb +6 -0
  53. data/app/views/goldencobra/admin/uploads/_jcrop.html.erb +23 -0
  54. data/app/views/goldencobra/articles/_edit_article_link.html.erb +1 -1
  55. data/app/views/goldencobra/articles/show.rss.builder +5 -0
  56. data/app/views/goldencobra/articles/sitemap.xml.builder +15 -1
  57. data/app/views/goldencobra/manage/_admin_article_management.html.erb +1 -1
  58. data/app/views/goldencobra/manage/_admin_article_management_content.html.erb +4 -4
  59. data/app/views/goldencobra/manage/render_admin_menue.html.erb +1 -0
  60. data/app/views/goldencobra/manage/render_admin_menue.js.erb +0 -1
  61. data/app/views/goldencobra/sessions/_login.html.erb +4 -4
  62. data/app/views/goldencobra/sessions/_register.html.erb +6 -6
  63. data/app/views/layouts/goldencobra/active_admin_resque.html.erb +1 -1
  64. data/app/worker/articles_cache_worker.rb +1 -1
  65. data/config/initializers/check_for_missing_articletypes.rb +40 -37
  66. data/config/initializers/devise.rb +3 -1
  67. data/config/initializers/http_validator.rb +9 -2
  68. data/config/initializers/liquid_tags.rb +2 -2
  69. data/config/locales/active_admin.de.yml +509 -3
  70. data/config/locales/active_admin.en.yml +580 -64
  71. data/config/locales/de.yml +478 -4
  72. data/config/locales/en.yml +406 -10
  73. data/config/pre-commit.rb +3 -0
  74. data/config/routes.rb +12 -1
  75. data/config/settings.yml +51 -50
  76. data/db/migrate/20130114154115_add_sorter_to_goldencobra_permissions.rb +4 -1
  77. data/db/migrate/20140204221345_add_operator_to_goldencobra_permissions.rb +5 -0
  78. data/db/migrate/20140411152728_add_creator_id_to_goldencobra_articles.rb +5 -0
  79. data/db/migrate/20140505144517_add_taggingcounter.rb +15 -0
  80. data/db/migrate/20140603084537_add_domain_to_goldencobra_permissions.rb +7 -0
  81. data/db/migrate/20140615200342_resize_link_checkfield.rb +13 -0
  82. data/db/migrate/20140626135753_add_externalreferee_to_goldencobra_articles.rb +6 -0
  83. data/db/migrate/20140702103024_add_externaldate_to_goldencobra_articles.rb +5 -0
  84. data/db/migrate/20140702105550_add_remoteurl_to_goldencobra_uploads.rb +5 -0
  85. data/db/migrate/20140702142818_add_image_gallery_type_to_goldencobra_articles.rb +5 -0
  86. data/db/migrate/20140819101033_add_urlpath_to_goldencobra_articles.rb +5 -0
  87. data/db/migrate/20141009104216_set_db_and_tables_to_utf8.rb +20 -0
  88. data/db/migrate/20141104115144_create_goldencobra_redirectors.rb +15 -0
  89. data/db/migrate/20141112124531_add_globalsorting_to_goldencobra_articles.rb +7 -0
  90. data/db/migrate/20141124170930_add_indiex_to_gc.rb +26 -0
  91. data/db/migrate/20150115111024_create_goldencobra_article_authors.rb +28 -0
  92. data/db/migrate/20150115134707_add_remove_author_stuff.rb +11 -0
  93. data/db/migrate/20150417153454_add_status_to_goldencobra_vita_steps.rb +5 -0
  94. data/db/seeds.rb +4 -153
  95. data/lib/generators/goldencobra/articletype/templates/edit_index.html.erb +1 -1
  96. data/lib/generators/goldencobra/articletype/templates/initializer.rb +4 -2
  97. data/lib/generators/goldencobra/install_generator.rb +3 -0
  98. data/lib/generators/goldencobra/server_generator.rb +67 -0
  99. data/lib/generators/goldencobra/templates/active_admin.rb.erb +3 -0
  100. data/lib/generators/goldencobra/templates/robots.txt +5 -0
  101. data/lib/generators/goldencobra/templates/views/articletypes/default/_edit_index.html.erb +9 -0
  102. data/lib/generators/goldencobra/templates/views/articletypes/default/_edit_show.html.erb +0 -0
  103. data/lib/generators/goldencobra/templates/views/articletypes/default/_index.html.erb +31 -18
  104. data/lib/generators/goldencobra/templates/views/articletypes/default/_show.html.erb +22 -15
  105. data/lib/goldencobra/engine.rb +19 -3
  106. data/lib/goldencobra/version.rb +1 -1
  107. data/lib/tasks/article_cache.rake +19 -0
  108. data/lib/tasks/i18n.rake +1 -1
  109. data/lib/tasks/import.rake +31 -3
  110. data/lib/tasks/link_checker.rake +4 -2
  111. metadata +217 -23
  112. data/config/locales/activerecord.de.yml +0 -227
  113. data/config/locales/activerecord.en.yml +0 -148
  114. data/config/locales/devise.de.yml +0 -54
  115. data/config/locales/devise.en.yml +0 -57
  116. data/config/locales/formtastic.de.yml +0 -10
  117. data/config/locales/formtastic.en.yml +0 -10
  118. data/config/locales/goldencobra.de.yml +0 -40
  119. data/config/locales/goldencobra.en.yml +0 -3
@@ -2,7 +2,8 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/ikusei/Goldencobra.png)](http://travis-ci.org/ikusei/Goldencobra)
4
4
 
5
- This Project is still under development
5
+ This Project is still under development.
6
+ This repository is now in sync with http://git.ikusei.de/projects/GC/repos/basis-modul/browse and now always up to date!
6
7
 
7
8
  #Powered by
8
9
  - ActiveAdmin
@@ -11,7 +12,7 @@ Installation of Goldencobra into a fresh Ruby on Rails project:
11
12
 
12
13
  #Requirements
13
14
  * Ruby 1.9.2-p180+ (recommended 1.9.3-p286)
14
- * Rails 3.2.8
15
+ * Rails 3.2.16
15
16
  * Mysql 5.5.x (tested with e.g. 5.5.19)
16
17
 
17
18
 
@@ -3,6 +3,8 @@
3
3
  //= require goldencobra/notifications
4
4
  //= require goldencobra/countable
5
5
  // require goldencobra/togetherjs besser in actve_admin_js über url einbinden
6
+ //= require goldencobra/jquery.color
7
+ //= require goldencobra/jquery.Jcrop.min
6
8
 
7
9
 
8
10
  //Live Support Settings
@@ -19,10 +21,32 @@ var TogetherJSConfig_on = {
19
21
  };
20
22
 
21
23
  $(function() {
24
+
25
+ //Wenn es get_goldencobra_articles_per_remote im 'Artikel bearbeiten' gibt,
26
+ // hole alle Goldencobra:Article :id,:title, :ancestry
27
+ var $select_parent_articles = $(".get_goldencobra_articles_per_remote");
28
+ if ( $select_parent_articles.length ){
29
+ $.ajax({
30
+ url: "/api/v2/articles.json"
31
+ }).done(function(data){
32
+ var selected_parent_id = $select_parent_articles.find("option:selected").val();
33
+ $select_parent_articles.html("<option value=''></option>");
34
+ $.each( data, function(index,value){
35
+ var selected_option = "";
36
+ if (value.id == selected_parent_id){
37
+ selected_option = " selected='selected' ";
38
+ }
39
+ $select_parent_articles.append("<option value='" + value.id + "' " + selected_option + ">" + value.parent_path + "</option>") ;
40
+ });
41
+ $select_parent_articles.trigger("chosen:updated");
42
+ return false;
43
+ });
44
+ }
45
+
22
46
  //Importer optionen Ein und Ausblendbar machen
23
- $('table.importer_assoziations tr.head td.nested_model_header span.button').bind("click", function(){
24
- id_to_class = $(this).closest(".head").attr('id');
25
- $('tr.model_group.' + id_to_class).toggle();
47
+ $("table.importer_assoziations tr.head td.nested_model_header span.button").bind("click", function(){
48
+ var id_to_class = $(this).closest(".head").attr("id");
49
+ $("tr.model_group." + id_to_class).toggle();
26
50
  if ($(this).html() == "Felder anzeigen"){
27
51
  $(this).html("Felder ausblenden");
28
52
  }else{
@@ -30,64 +54,64 @@ $(function() {
30
54
  }
31
55
  });
32
56
 
33
- if (typeof tinyMCESetting_theme_advanced_blockformats === 'undefined') {
34
- var tinyMCESetting_theme_advanced_blockformats = "p,h1,h2,h3,div"
57
+ if (typeof tinyMCESetting_theme_advanced_blockformats === "undefined") {
58
+ var tinyMCESetting_theme_advanced_blockformats = "p,h1,h2,h3,div";
35
59
  }
36
60
 
37
- $('textarea.tinymce-no-buttons').tinymce({
61
+ $("textarea.tinymce-no-buttons").tinymce({
38
62
  script_url: "/assets/goldencobra/tiny_mce.js",
39
- mode : "textareas",
40
- theme : "advanced",
41
- theme_advanced_buttons1 : "",
42
- theme_advanced_buttons2 : "",
43
- theme_advanced_buttons3 : "",
44
- theme_advanced_toolbar_location : "top",
45
- theme_advanced_toolbar_align : "center",
46
- theme_advanced_resizing : false,
47
- relative_urls : true,
48
- convert_urls : false,
49
- theme_advanced_blockformats : tinyMCESetting_theme_advanced_blockformats,
50
- plugins : "autolink,paste",
51
- dialog_type : "modal",
52
- paste_auto_cleanup_on_paste : true
63
+ mode: "textareas",
64
+ theme: "advanced",
65
+ theme_advanced_buttons1: "",
66
+ theme_advanced_buttons2: "",
67
+ theme_advanced_buttons3: "",
68
+ theme_advanced_toolbar_location: "top",
69
+ theme_advanced_toolbar_align: "center",
70
+ theme_advanced_resizing: false,
71
+ relative_urls: true,
72
+ convert_urls: false,
73
+ theme_advanced_blockformats: tinyMCESetting_theme_advanced_blockformats,
74
+ plugins: "autolink,paste",
75
+ dialog_type: "modal",
76
+ paste_auto_cleanup_on_paste: true
53
77
  });
54
78
 
55
79
 
56
80
  $('textarea.tinymce').tinymce({
57
81
  script_url: "/assets/goldencobra/tiny_mce.js",
58
- mode : "textareas",
59
- theme : "advanced",
60
- theme_advanced_buttons1 : "formatselect, bold, italic, underline, strikethrough,|, bullist, numlist, blockquote, |, pastetext,pasteword, |, undo, redo, |, link, unlink, code, fullscreen",
61
- theme_advanced_buttons2 : "",
62
- theme_advanced_buttons3 : "",
63
- theme_advanced_toolbar_location : "top",
64
- theme_advanced_toolbar_align : "center",
65
- theme_advanced_resizing : false,
66
- relative_urls : true,
67
- convert_urls : false,
68
- theme_advanced_blockformats : tinyMCESetting_theme_advanced_blockformats,
69
- plugins : "fullscreen,autolink,paste",
70
- dialog_type : "modal",
71
- paste_auto_cleanup_on_paste : true
82
+ mode: "textareas",
83
+ theme: "advanced",
84
+ theme_advanced_buttons1: "formatselect, bold, italic, underline, strikethrough,|, bullist, numlist, blockquote, |, pastetext,pasteword, |, undo, redo, |, link, unlink, code, fullscreen",
85
+ theme_advanced_buttons2: "",
86
+ theme_advanced_buttons3: "",
87
+ theme_advanced_toolbar_location: "top",
88
+ theme_advanced_toolbar_align: "center",
89
+ theme_advanced_resizing: false,
90
+ relative_urls: true,
91
+ convert_urls: false,
92
+ theme_advanced_blockformats: tinyMCESetting_theme_advanced_blockformats,
93
+ plugins: "fullscreen,autolink,paste",
94
+ dialog_type: "modal",
95
+ paste_auto_cleanup_on_paste: true
72
96
  });
73
97
 
74
98
  $('textarea.tinymce_extended').tinymce({
75
99
  script_url: "/assets/goldencobra/tiny_mce.js",
76
- mode : "textareas",
77
- theme : "advanced",
78
- theme_advanced_buttons1 : "formatselect, bold, italic, underline, strikethrough,|, bullist, numlist, blockquote, |, pastetext,pasteword, |, undo, redo, |, link, unlink, code, fullscreen",
79
- theme_advanced_buttons2 : "removeformat, fontsizeselect, forecolor, backcolor, forecolorpicker, backcolorpicker",
80
- theme_advanced_buttons3 : "tablecontrols",
81
- theme_advanced_toolbar_location : "top",
82
- theme_advanced_toolbar_align : "left",
83
- theme_advanced_resizing : false,
84
- relative_urls : true,
85
- convert_urls : false,
86
- theme_advanced_blockformats : tinyMCESetting_theme_advanced_blockformats,
87
- plugins : "fullscreen,autolink,paste,table",
88
- dialog_type : "modal",
89
- paste_auto_cleanup_on_paste : true,
90
- verify_html : false
100
+ mode: "textareas",
101
+ theme: "advanced",
102
+ theme_advanced_buttons1: "formatselect, bold, italic, underline, strikethrough,|, bullist, numlist, blockquote, |, pastetext,pasteword, |, undo, redo, |, link, unlink, code, fullscreen",
103
+ theme_advanced_buttons2: "removeformat, fontsizeselect, forecolor, backcolor, forecolorpicker, backcolorpicker",
104
+ theme_advanced_buttons3: "tablecontrols",
105
+ theme_advanced_toolbar_location: "top",
106
+ theme_advanced_toolbar_align: "left",
107
+ theme_advanced_resizing: false,
108
+ relative_urls: true,
109
+ convert_urls: false,
110
+ theme_advanced_blockformats: tinyMCESetting_theme_advanced_blockformats,
111
+ plugins: "fullscreen,autolink,paste,table",
112
+ dialog_type: "modal",
113
+ paste_auto_cleanup_on_paste: true,
114
+ verify_html: false
91
115
  });
92
116
 
93
117
  //TextCounter auf title, subtitle, Teaser, Summary, Breadcrumb, url_name
@@ -103,28 +127,28 @@ $(function() {
103
127
  });
104
128
 
105
129
  //Foldable overview in sidebar
106
- $("div.overview-sidebar div.folder").bind("click", function(){
130
+ $("div.overview-sidebar div.folder").live("click", function(){
107
131
  $(this).closest('li').find("ul:first").slideToggle();
108
132
  });
109
133
  $("div.overview-sidebar div.folder").trigger("click");
110
134
 
111
135
  //Add Button Background Jobs zu Settings
112
- $('#einstellungen ul').append("<li><a href='/admin/background'>Background Jobs</a></li>")
136
+ //$('#einstellungen ul').append("<li><a href='/admin/background'>Background Jobs</a></li>")
113
137
 
114
138
  $('.metadescription_hint').tinymce({
115
139
  script_url: "/assets/goldencobra/tiny_mce.js",
116
- mode : "textareas",
117
- theme : "advanced",
140
+ mode: "textareas",
141
+ theme: "advanced",
118
142
  readonly: 1,
119
- theme_advanced_default_background_color : "#f4f4f4",
120
- theme_advanced_buttons1 : "",
121
- theme_advanced_buttons2 : "",
122
- theme_advanced_buttons3 : "",
123
- theme_advanced_toolbar_location : "bottom",
124
- theme_advanced_toolbar_align : "center",
125
- theme_advanced_resizing : false,
126
- body_id : "metadescription-tinymce-body",
127
- content_css : "/assets/goldencobra/active_admin.css"
143
+ theme_advanced_default_background_color: "#f4f4f4",
144
+ theme_advanced_buttons1: "",
145
+ theme_advanced_buttons2: "",
146
+ theme_advanced_buttons3: "",
147
+ theme_advanced_toolbar_location: "bottom",
148
+ theme_advanced_toolbar_align: "center",
149
+ theme_advanced_resizing: false,
150
+ body_id: "metadescription-tinymce-body",
151
+ content_css: "/assets/goldencobra/active_admin.css"
128
152
  });
129
153
 
130
154
  function postInitWork() {
@@ -146,10 +170,10 @@ $(function() {
146
170
  $("#goldencobra_image_maganger").fadeOut();
147
171
  });
148
172
 
149
- $('#footer').html("<p>Goldencobra</p>")
173
+ $('#footer').html("<p>Goldencobra</p>");
150
174
 
151
175
  //die fieldsets bekommen einen button zum auf und zu klappen
152
- $('div#main_content > form > fieldset.foldable > legend').prepend("<div class='foldable_icon_wrapper'><div class='foldable_icon'></div></div>")
176
+ $('div#main_content > form > fieldset.foldable > legend').prepend("<div class='foldable_icon_wrapper'><div class='foldable_icon'></div></div>");
153
177
  $('div#main_content > form > fieldset.foldable > legend').bind("click", function(){
154
178
  $(this).closest("fieldset").find(".foldable_icon").toggleClass("open");
155
179
  $(this).closest("fieldset").find('ol').slideToggle();
@@ -157,14 +181,23 @@ $(function() {
157
181
  $('div#main_content > form > fieldset.foldable.closed legend').trigger("click");
158
182
 
159
183
  //die sidebar_section bekommen einen button zum auf und zu klappen
160
- $('div#sidebar div.sidebar_section h3').prepend("<div class='foldable_icon_wrapper'><div class='foldable_icon'></div></div>")
184
+ $('div#sidebar div.sidebar_section h3').prepend("<div class='foldable_icon_wrapper'><div class='foldable_icon'></div></div>");
161
185
  $('div#sidebar div.sidebar_section h3').bind("click", function(){
162
186
  $(this).closest(".sidebar_section").find(".foldable_icon").toggleClass("open");
163
187
  $(this).closest(".sidebar_section").find('.panel_contents').slideToggle();
164
188
  });
165
- $('div#sidebar div.sidebar_section:not(#overview_sidebar_section, #layout_positions_sidebar_section) h3').trigger("click");
189
+ $('div#sidebar div.sidebar_section:not(#layout_positions_sidebar_section) h3').trigger("click");
166
190
  $('div#sidebar div.sidebar_section .warning').closest("div.sidebar_section").addClass("warning").find("h3").trigger("click");
167
191
 
192
+
193
+ //die Settings sub groups bekommen ein button zum aufklappen
194
+ $('div#goldencobra_settings_wrapper .foldable').prepend("<div class='foldable_icon_wrapper'><div class='foldable_icon'></div></div>");
195
+ $('div#goldencobra_settings_wrapper .foldable').bind("click", function(){
196
+ $(this).closest(".settings_group_title").find(".foldable_icon").toggleClass("open");
197
+ $(this).closest(".settings_level").children('.settings_sub_group').slideToggle();
198
+ });
199
+
200
+
168
201
  $(".chzn-select").chosen();
169
202
  $(".chzn-select-deselect").chosen({ allow_single_deselect: true });
170
203
  $("a.button").live("click", function(){
@@ -174,28 +207,29 @@ $(function() {
174
207
 
175
208
  //Menuepunkte bekommen eine funktion zum auf und zu klappen
176
209
  $('div#overview_sidebar div.title a').bind("click", function(){
177
- $(this).children("ul").hide();
210
+ $(this).children("ul").hide();
178
211
  });
179
212
 
180
213
  $('div#overview_sidebar div.title a').trigger("click");
181
214
 
182
- $("#main_content form input:submit").attr("value", $("#main_content form input:submit").attr("value") + " (⌘-S)");
215
+ $("#main_content form:not(.without_short_key) input:submit").attr("value", $("#main_content form input:submit").attr("value") + " (⌘-S)");
216
+
183
217
  key('⌘+s, ctrl+s', function() {
184
- $("#main_content form input:submit").trigger("click");
185
- return false;
218
+ $("#main_content form input:submit").trigger("click");
219
+ return false;
186
220
  });
187
221
 
188
222
  $("body.show #title_bar .action_items a[href$='edit']").append(" (⌘-E)");
189
223
  key('⌘+e, ctrl+e', function(){
190
- target = $("#title_bar .action_items a[href$='edit']").attr("href");
191
- window.location = target;
192
- return false;
224
+ target = $("#title_bar .action_items a[href$='edit']").attr("href");
225
+ window.location = target;
226
+ return false;
193
227
  });
194
228
 
195
229
  //Short Key for Life support on every Page
196
- key('⌘+k, ctrl+k', function(){
197
- call_for_help();
198
- })
230
+ key('⌘+k, ctrl+k', function(){
231
+ call_for_help();
232
+ });
199
233
 
200
234
  // $("#title_bar .action_items a[href$='revert']").append(" (⌘-Z)");
201
235
  // key('⌘+z, ctrl+z', function(){
@@ -217,13 +251,13 @@ $(function() {
217
251
  // für jede checkbox die dazugehörigen input felder holen und anhängen
218
252
  checkBoxesDays.each(function(i, el) {
219
253
  // checkbox muss neue css styles erhalten
220
- var addCssBox = {"float" : "left", "width" : "50px", "margin-top" : "8px"};
254
+ var addCssBox = {"float": "left", "width": "50px", "margin-top": "8px"};
221
255
  $(el).height(50).find("label").css(addCssBox);
222
256
  // selektoren für start und end inputs eines tages
223
257
  var startInput = $("#widget_offline_time_start_" + engDaysShort[i] + "_input");
224
258
  var endInput = $("#widget_offline_time_end_" + engDaysShort[i] + "_input");
225
259
  // label der inputs entfernen und benötigten css style ergänzen
226
- var addCssInput = {"float" : "left", "width" : "180px"};
260
+ var addCssInput = {"float": "left", "width": "180px"};
227
261
  $(startInput).css(addCssInput).find("label").remove();
228
262
  $(endInput).css(addCssInput).find("label").remove();
229
263
  // inputs zur checkbox gruppieren
@@ -231,16 +265,43 @@ $(function() {
231
265
  $(endInput).appendTo(el);
232
266
  });
233
267
  /**** END DOM Manipulation *****/
268
+
269
+ $("ul.link_checker_ul div.link_checker_label").click(function(){
270
+ $(this).siblings(".link_checker_sources").toggle();
271
+ });
272
+
273
+ // optimize header menu bar
274
+ $('#utility_nav').after('<div style="clear: both;"></div>');
275
+ $('#wrapper > #header').css('height', 'auto').css('min-width', '890px').css('filter', 'none');
276
+
277
+ // own logo per app from settings url
278
+ changeLogoFromSetting();
234
279
  });
235
280
 
236
- function call_for_help (argument) {
281
+ function call_for_help(argument) {
237
282
  TogetherJS(this);
238
283
  return false;
239
284
  }
240
285
 
241
- $(function() {
242
- $("ul.link_checker_ul div.link_checker_label").click(function(){
243
- $(this).siblings(".link_checker_sources").toggle();
244
- });
245
- });
246
286
 
287
+ /**
288
+ *
289
+ * get ajax logo url for chanigng admin backend logo picture
290
+ *
291
+ */
292
+ function changeLogoFromSetting() {
293
+ $.ajax({
294
+ type : 'GET',
295
+ url : '/api/v2/setting_string',
296
+ data : { 'setting_key': 'goldencobra.random_logo_url' },
297
+ success: function (data) {
298
+ if (data && data.indexOf('translation missing') == -1) {
299
+ // change background image of header logo
300
+ $('#header h1').css('background', 'url("' + data + '") no-repeat scroll center top / 100px auto rgba(0, 0, 0, 0)');
301
+ } else {
302
+ // set standard url of header logo for fallback
303
+ $('#header h1').css('background', 'url("/assets/goldencobra/cobra.png") no-repeat scroll center top / auto auto rgba(0, 0, 0, 0)');
304
+ }
305
+ }
306
+ });
307
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * jquery.Jcrop.min.js v0.9.12 (build:20130202)
3
+ * jQuery Image Cropping Plugin - released under MIT License
4
+ * Copyright (c) 2008-2013 Tapmodo Interactive LLC
5
+ * https://github.com/tapmodo/Jcrop
6
+ */
7
+ (function(a){a.Jcrop=function(b,c){function i(a){return Math.round(a)+"px"}function j(a){return d.baseClass+"-"+a}function k(){return a.fx.step.hasOwnProperty("backgroundColor")}function l(b){var c=a(b).offset();return[c.left,c.top]}function m(a){return[a.pageX-e[0],a.pageY-e[1]]}function n(b){typeof b!="object"&&(b={}),d=a.extend(d,b),a.each(["onChange","onSelect","onRelease","onDblClick"],function(a,b){typeof d[b]!="function"&&(d[b]=function(){})})}function o(a,b,c){e=l(D),bc.setCursor(a==="move"?a:a+"-resize");if(a==="move")return bc.activateHandlers(q(b),v,c);var d=_.getFixed(),f=r(a),g=_.getCorner(r(f));_.setPressed(_.getCorner(f)),_.setCurrent(g),bc.activateHandlers(p(a,d),v,c)}function p(a,b){return function(c){if(!d.aspectRatio)switch(a){case"e":c[1]=b.y2;break;case"w":c[1]=b.y2;break;case"n":c[0]=b.x2;break;case"s":c[0]=b.x2}else switch(a){case"e":c[1]=b.y+1;break;case"w":c[1]=b.y+1;break;case"n":c[0]=b.x+1;break;case"s":c[0]=b.x+1}_.setCurrent(c),bb.update()}}function q(a){var b=a;return bd.watchKeys
8
+ (),function(a){_.moveOffset([a[0]-b[0],a[1]-b[1]]),b=a,bb.update()}}function r(a){switch(a){case"n":return"sw";case"s":return"nw";case"e":return"nw";case"w":return"ne";case"ne":return"sw";case"nw":return"se";case"se":return"nw";case"sw":return"ne"}}function s(a){return function(b){return d.disabled?!1:a==="move"&&!d.allowMove?!1:(e=l(D),W=!0,o(a,m(b)),b.stopPropagation(),b.preventDefault(),!1)}}function t(a,b,c){var d=a.width(),e=a.height();d>b&&b>0&&(d=b,e=b/a.width()*a.height()),e>c&&c>0&&(e=c,d=c/a.height()*a.width()),T=a.width()/d,U=a.height()/e,a.width(d).height(e)}function u(a){return{x:a.x*T,y:a.y*U,x2:a.x2*T,y2:a.y2*U,w:a.w*T,h:a.h*U}}function v(a){var b=_.getFixed();b.w>d.minSelect[0]&&b.h>d.minSelect[1]?(bb.enableHandles(),bb.done()):bb.release(),bc.setCursor(d.allowSelect?"crosshair":"default")}function w(a){if(d.disabled)return!1;if(!d.allowSelect)return!1;W=!0,e=l(D),bb.disableHandles(),bc.setCursor("crosshair");var b=m(a);return _.setPressed(b),bb.update(),bc.activateHandlers(x,v,a.type.substring
9
+ (0,5)==="touch"),bd.watchKeys(),a.stopPropagation(),a.preventDefault(),!1}function x(a){_.setCurrent(a),bb.update()}function y(){var b=a("<div></div>").addClass(j("tracker"));return g&&b.css({opacity:0,backgroundColor:"white"}),b}function be(a){G.removeClass().addClass(j("holder")).addClass(a)}function bf(a,b){function t(){window.setTimeout(u,l)}var c=a[0]/T,e=a[1]/U,f=a[2]/T,g=a[3]/U;if(X)return;var h=_.flipCoords(c,e,f,g),i=_.getFixed(),j=[i.x,i.y,i.x2,i.y2],k=j,l=d.animationDelay,m=h[0]-j[0],n=h[1]-j[1],o=h[2]-j[2],p=h[3]-j[3],q=0,r=d.swingSpeed;c=k[0],e=k[1],f=k[2],g=k[3],bb.animMode(!0);var s,u=function(){return function(){q+=(100-q)/r,k[0]=Math.round(c+q/100*m),k[1]=Math.round(e+q/100*n),k[2]=Math.round(f+q/100*o),k[3]=Math.round(g+q/100*p),q>=99.8&&(q=100),q<100?(bh(k),t()):(bb.done(),bb.animMode(!1),typeof b=="function"&&b.call(bs))}}();t()}function bg(a){bh([a[0]/T,a[1]/U,a[2]/T,a[3]/U]),d.onSelect.call(bs,u(_.getFixed())),bb.enableHandles()}function bh(a){_.setPressed([a[0],a[1]]),_.setCurrent([a[2],
10
+ a[3]]),bb.update()}function bi(){return u(_.getFixed())}function bj(){return _.getFixed()}function bk(a){n(a),br()}function bl(){d.disabled=!0,bb.disableHandles(),bb.setCursor("default"),bc.setCursor("default")}function bm(){d.disabled=!1,br()}function bn(){bb.done(),bc.activateHandlers(null,null)}function bo(){G.remove(),A.show(),A.css("visibility","visible"),a(b).removeData("Jcrop")}function bp(a,b){bb.release(),bl();var c=new Image;c.onload=function(){var e=c.width,f=c.height,g=d.boxWidth,h=d.boxHeight;D.width(e).height(f),D.attr("src",a),H.attr("src",a),t(D,g,h),E=D.width(),F=D.height(),H.width(E).height(F),M.width(E+L*2).height(F+L*2),G.width(E).height(F),ba.resize(E,F),bm(),typeof b=="function"&&b.call(bs)},c.src=a}function bq(a,b,c){var e=b||d.bgColor;d.bgFade&&k()&&d.fadeTime&&!c?a.animate({backgroundColor:e},{queue:!1,duration:d.fadeTime}):a.css("backgroundColor",e)}function br(a){d.allowResize?a?bb.enableOnly():bb.enableHandles():bb.disableHandles(),bc.setCursor(d.allowSelect?"crosshair":"default"),bb
11
+ .setCursor(d.allowMove?"move":"default"),d.hasOwnProperty("trueSize")&&(T=d.trueSize[0]/E,U=d.trueSize[1]/F),d.hasOwnProperty("setSelect")&&(bg(d.setSelect),bb.done(),delete d.setSelect),ba.refresh(),d.bgColor!=N&&(bq(d.shade?ba.getShades():G,d.shade?d.shadeColor||d.bgColor:d.bgColor),N=d.bgColor),O!=d.bgOpacity&&(O=d.bgOpacity,d.shade?ba.refresh():bb.setBgOpacity(O)),P=d.maxSize[0]||0,Q=d.maxSize[1]||0,R=d.minSize[0]||0,S=d.minSize[1]||0,d.hasOwnProperty("outerImage")&&(D.attr("src",d.outerImage),delete d.outerImage),bb.refresh()}var d=a.extend({},a.Jcrop.defaults),e,f=navigator.userAgent.toLowerCase(),g=/msie/.test(f),h=/msie [1-6]\./.test(f);typeof b!="object"&&(b=a(b)[0]),typeof c!="object"&&(c={}),n(c);var z={border:"none",visibility:"visible",margin:0,padding:0,position:"absolute",top:0,left:0},A=a(b),B=!0;if(b.tagName=="IMG"){if(A[0].width!=0&&A[0].height!=0)A.width(A[0].width),A.height(A[0].height);else{var C=new Image;C.src=A[0].src,A.width(C.width),A.height(C.height)}var D=A.clone().removeAttr("id").
12
+ css(z).show();D.width(A.width()),D.height(A.height()),A.after(D).hide()}else D=A.css(z).show(),B=!1,d.shade===null&&(d.shade=!0);t(D,d.boxWidth,d.boxHeight);var E=D.width(),F=D.height(),G=a("<div />").width(E).height(F).addClass(j("holder")).css({position:"relative",backgroundColor:d.bgColor}).insertAfter(A).append(D);d.addClass&&G.addClass(d.addClass);var H=a("<div />"),I=a("<div />").width("100%").height("100%").css({zIndex:310,position:"absolute",overflow:"hidden"}),J=a("<div />").width("100%").height("100%").css("zIndex",320),K=a("<div />").css({position:"absolute",zIndex:600}).dblclick(function(){var a=_.getFixed();d.onDblClick.call(bs,a)}).insertBefore(D).append(I,J);B&&(H=a("<img />").attr("src",D.attr("src")).css(z).width(E).height(F),I.append(H)),h&&K.css({overflowY:"hidden"});var L=d.boundary,M=y().width(E+L*2).height(F+L*2).css({position:"absolute",top:i(-L),left:i(-L),zIndex:290}).mousedown(w),N=d.bgColor,O=d.bgOpacity,P,Q,R,S,T,U,V=!0,W,X,Y;e=l(D);var Z=function(){function a(){var a={},b=["touchstart"
13
+ ,"touchmove","touchend"],c=document.createElement("div"),d;try{for(d=0;d<b.length;d++){var e=b[d];e="on"+e;var f=e in c;f||(c.setAttribute(e,"return;"),f=typeof c[e]=="function"),a[b[d]]=f}return a.touchstart&&a.touchend&&a.touchmove}catch(g){return!1}}function b(){return d.touchSupport===!0||d.touchSupport===!1?d.touchSupport:a()}return{createDragger:function(a){return function(b){return d.disabled?!1:a==="move"&&!d.allowMove?!1:(e=l(D),W=!0,o(a,m(Z.cfilter(b)),!0),b.stopPropagation(),b.preventDefault(),!1)}},newSelection:function(a){return w(Z.cfilter(a))},cfilter:function(a){return a.pageX=a.originalEvent.changedTouches[0].pageX,a.pageY=a.originalEvent.changedTouches[0].pageY,a},isSupported:a,support:b()}}(),_=function(){function h(d){d=n(d),c=a=d[0],e=b=d[1]}function i(a){a=n(a),f=a[0]-c,g=a[1]-e,c=a[0],e=a[1]}function j(){return[f,g]}function k(d){var f=d[0],g=d[1];0>a+f&&(f-=f+a),0>b+g&&(g-=g+b),F<e+g&&(g+=F-(e+g)),E<c+f&&(f+=E-(c+f)),a+=f,c+=f,b+=g,e+=g}function l(a){var b=m();switch(a){case"ne":return[
14
+ b.x2,b.y];case"nw":return[b.x,b.y];case"se":return[b.x2,b.y2];case"sw":return[b.x,b.y2]}}function m(){if(!d.aspectRatio)return p();var f=d.aspectRatio,g=d.minSize[0]/T,h=d.maxSize[0]/T,i=d.maxSize[1]/U,j=c-a,k=e-b,l=Math.abs(j),m=Math.abs(k),n=l/m,r,s,t,u;return h===0&&(h=E*10),i===0&&(i=F*10),n<f?(s=e,t=m*f,r=j<0?a-t:t+a,r<0?(r=0,u=Math.abs((r-a)/f),s=k<0?b-u:u+b):r>E&&(r=E,u=Math.abs((r-a)/f),s=k<0?b-u:u+b)):(r=c,u=l/f,s=k<0?b-u:b+u,s<0?(s=0,t=Math.abs((s-b)*f),r=j<0?a-t:t+a):s>F&&(s=F,t=Math.abs(s-b)*f,r=j<0?a-t:t+a)),r>a?(r-a<g?r=a+g:r-a>h&&(r=a+h),s>b?s=b+(r-a)/f:s=b-(r-a)/f):r<a&&(a-r<g?r=a-g:a-r>h&&(r=a-h),s>b?s=b+(a-r)/f:s=b-(a-r)/f),r<0?(a-=r,r=0):r>E&&(a-=r-E,r=E),s<0?(b-=s,s=0):s>F&&(b-=s-F,s=F),q(o(a,b,r,s))}function n(a){return a[0]<0&&(a[0]=0),a[1]<0&&(a[1]=0),a[0]>E&&(a[0]=E),a[1]>F&&(a[1]=F),[Math.round(a[0]),Math.round(a[1])]}function o(a,b,c,d){var e=a,f=c,g=b,h=d;return c<a&&(e=c,f=a),d<b&&(g=d,h=b),[e,g,f,h]}function p(){var d=c-a,f=e-b,g;return P&&Math.abs(d)>P&&(c=d>0?a+P:a-P),Q&&Math.abs
15
+ (f)>Q&&(e=f>0?b+Q:b-Q),S/U&&Math.abs(f)<S/U&&(e=f>0?b+S/U:b-S/U),R/T&&Math.abs(d)<R/T&&(c=d>0?a+R/T:a-R/T),a<0&&(c-=a,a-=a),b<0&&(e-=b,b-=b),c<0&&(a-=c,c-=c),e<0&&(b-=e,e-=e),c>E&&(g=c-E,a-=g,c-=g),e>F&&(g=e-F,b-=g,e-=g),a>E&&(g=a-F,e-=g,b-=g),b>F&&(g=b-F,e-=g,b-=g),q(o(a,b,c,e))}function q(a){return{x:a[0],y:a[1],x2:a[2],y2:a[3],w:a[2]-a[0],h:a[3]-a[1]}}var a=0,b=0,c=0,e=0,f,g;return{flipCoords:o,setPressed:h,setCurrent:i,getOffset:j,moveOffset:k,getCorner:l,getFixed:m}}(),ba=function(){function f(a,b){e.left.css({height:i(b)}),e.right.css({height:i(b)})}function g(){return h(_.getFixed())}function h(a){e.top.css({left:i(a.x),width:i(a.w),height:i(a.y)}),e.bottom.css({top:i(a.y2),left:i(a.x),width:i(a.w),height:i(F-a.y2)}),e.right.css({left:i(a.x2),width:i(E-a.x2)}),e.left.css({width:i(a.x)})}function j(){return a("<div />").css({position:"absolute",backgroundColor:d.shadeColor||d.bgColor}).appendTo(c)}function k(){b||(b=!0,c.insertBefore(D),g(),bb.setBgOpacity(1,0,1),H.hide(),l(d.shadeColor||d.bgColor,1),bb.
16
+ isAwake()?n(d.bgOpacity,1):n(1,1))}function l(a,b){bq(p(),a,b)}function m(){b&&(c.remove(),H.show(),b=!1,bb.isAwake()?bb.setBgOpacity(d.bgOpacity,1,1):(bb.setBgOpacity(1,1,1),bb.disableHandles()),bq(G,0,1))}function n(a,e){b&&(d.bgFade&&!e?c.animate({opacity:1-a},{queue:!1,duration:d.fadeTime}):c.css({opacity:1-a}))}function o(){d.shade?k():m(),bb.isAwake()&&n(d.bgOpacity)}function p(){return c.children()}var b=!1,c=a("<div />").css({position:"absolute",zIndex:240,opacity:0}),e={top:j(),left:j().height(F),right:j().height(F),bottom:j()};return{update:g,updateRaw:h,getShades:p,setBgColor:l,enable:k,disable:m,resize:f,refresh:o,opacity:n}}(),bb=function(){function k(b){var c=a("<div />").css({position:"absolute",opacity:d.borderOpacity}).addClass(j(b));return I.append(c),c}function l(b,c){var d=a("<div />").mousedown(s(b)).css({cursor:b+"-resize",position:"absolute",zIndex:c}).addClass("ord-"+b);return Z.support&&d.bind("touchstart.jcrop",Z.createDragger(b)),J.append(d),d}function m(a){var b=d.handleSize,e=l(a,c++
17
+ ).css({opacity:d.handleOpacity}).addClass(j("handle"));return b&&e.width(b).height(b),e}function n(a){return l(a,c++).addClass("jcrop-dragbar")}function o(a){var b;for(b=0;b<a.length;b++)g[a[b]]=n(a[b])}function p(a){var b,c;for(c=0;c<a.length;c++){switch(a[c]){case"n":b="hline";break;case"s":b="hline bottom";break;case"e":b="vline right";break;case"w":b="vline"}e[a[c]]=k(b)}}function q(a){var b;for(b=0;b<a.length;b++)f[a[b]]=m(a[b])}function r(a,b){d.shade||H.css({top:i(-b),left:i(-a)}),K.css({top:i(b),left:i(a)})}function t(a,b){K.width(Math.round(a)).height(Math.round(b))}function v(){var a=_.getFixed();_.setPressed([a.x,a.y]),_.setCurrent([a.x2,a.y2]),w()}function w(a){if(b)return x(a)}function x(a){var c=_.getFixed();t(c.w,c.h),r(c.x,c.y),d.shade&&ba.updateRaw(c),b||A(),a?d.onSelect.call(bs,u(c)):d.onChange.call(bs,u(c))}function z(a,c,e){if(!b&&!c)return;d.bgFade&&!e?D.animate({opacity:a},{queue:!1,duration:d.fadeTime}):D.css("opacity",a)}function A(){K.show(),d.shade?ba.opacity(O):z(O,!0),b=!0}function B
18
+ (){F(),K.hide(),d.shade?ba.opacity(1):z(1),b=!1,d.onRelease.call(bs)}function C(){h&&J.show()}function E(){h=!0;if(d.allowResize)return J.show(),!0}function F(){h=!1,J.hide()}function G(a){a?(X=!0,F()):(X=!1,E())}function L(){G(!1),v()}var b,c=370,e={},f={},g={},h=!1;d.dragEdges&&a.isArray(d.createDragbars)&&o(d.createDragbars),a.isArray(d.createHandles)&&q(d.createHandles),d.drawBorders&&a.isArray(d.createBorders)&&p(d.createBorders),a(document).bind("touchstart.jcrop-ios",function(b){a(b.currentTarget).hasClass("jcrop-tracker")&&b.stopPropagation()});var M=y().mousedown(s("move")).css({cursor:"move",position:"absolute",zIndex:360});return Z.support&&M.bind("touchstart.jcrop",Z.createDragger("move")),I.append(M),F(),{updateVisible:w,update:x,release:B,refresh:v,isAwake:function(){return b},setCursor:function(a){M.css("cursor",a)},enableHandles:E,enableOnly:function(){h=!0},showHandles:C,disableHandles:F,animMode:G,setBgOpacity:z,done:L}}(),bc=function(){function f(b){M.css({zIndex:450}),b?a(document).bind("touchmove.jcrop"
19
+ ,k).bind("touchend.jcrop",l):e&&a(document).bind("mousemove.jcrop",h).bind("mouseup.jcrop",i)}function g(){M.css({zIndex:290}),a(document).unbind(".jcrop")}function h(a){return b(m(a)),!1}function i(a){return a.preventDefault(),a.stopPropagation(),W&&(W=!1,c(m(a)),bb.isAwake()&&d.onSelect.call(bs,u(_.getFixed())),g(),b=function(){},c=function(){}),!1}function j(a,d,e){return W=!0,b=a,c=d,f(e),!1}function k(a){return b(m(Z.cfilter(a))),!1}function l(a){return i(Z.cfilter(a))}function n(a){M.css("cursor",a)}var b=function(){},c=function(){},e=d.trackDocument;return e||M.mousemove(h).mouseup(i).mouseout(i),D.before(M),{activateHandlers:j,setCursor:n}}(),bd=function(){function e(){d.keySupport&&(b.show(),b.focus())}function f(a){b.hide()}function g(a,b,c){d.allowMove&&(_.moveOffset([b,c]),bb.updateVisible(!0)),a.preventDefault(),a.stopPropagation()}function i(a){if(a.ctrlKey||a.metaKey)return!0;Y=a.shiftKey?!0:!1;var b=Y?10:1;switch(a.keyCode){case 37:g(a,-b,0);break;case 39:g(a,b,0);break;case 38:g(a,0,-b);break;
20
+ case 40:g(a,0,b);break;case 27:d.allowSelect&&bb.release();break;case 9:return!0}return!1}var b=a('<input type="radio" />').css({position:"fixed",left:"-120px",width:"12px"}).addClass("jcrop-keymgr"),c=a("<div />").css({position:"absolute",overflow:"hidden"}).append(b);return d.keySupport&&(b.keydown(i).blur(f),h||!d.fixedSupport?(b.css({position:"absolute",left:"-20px"}),c.append(b).insertBefore(D)):b.insertBefore(D)),{watchKeys:e}}();Z.support&&M.bind("touchstart.jcrop",Z.newSelection),J.hide(),br(!0);var bs={setImage:bp,animateTo:bf,setSelect:bg,setOptions:bk,tellSelect:bi,tellScaled:bj,setClass:be,disable:bl,enable:bm,cancel:bn,release:bb.release,destroy:bo,focus:bd.watchKeys,getBounds:function(){return[E*T,F*U]},getWidgetSize:function(){return[E,F]},getScaleFactor:function(){return[T,U]},getOptions:function(){return d},ui:{holder:G,selection:K}};return g&&G.bind("selectstart",function(){return!1}),A.data("Jcrop",bs),bs},a.fn.Jcrop=function(b,c){var d;return this.each(function(){if(a(this).data("Jcrop")){if(
21
+ b==="api")return a(this).data("Jcrop");a(this).data("Jcrop").setOptions(b)}else this.tagName=="IMG"?a.Jcrop.Loader(this,function(){a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d)}):(a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d))}),this},a.Jcrop.Loader=function(b,c,d){function g(){f.complete?(e.unbind(".jcloader"),a.isFunction(c)&&c.call(f)):window.setTimeout(g,50)}var e=a(b),f=e[0];e.bind("load.jcloader",g).bind("error.jcloader",function(b){e.unbind(".jcloader"),a.isFunction(d)&&d.call(f)}),f.complete&&a.isFunction(c)&&(e.unbind(".jcloader"),c.call(f))},a.Jcrop.defaults={allowSelect:!0,allowMove:!0,allowResize:!0,trackDocument:!0,baseClass:"jcrop",addClass:null,bgColor:"black",bgOpacity:.6,bgFade:!1,borderOpacity:.4,handleOpacity:.5,handleSize:null,aspectRatio:0,keySupport:!0,createHandles:["n","s","e","w","nw","ne","se","sw"],createDragbars:["n","s","e","w"],createBorders:["n","s","e","w"],drawBorders:!0,dragEdges
22
+ :!0,fixedSupport:!0,touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}}})(jQuery);
@@ -0,0 +1,661 @@
1
+ /*!
2
+ * jQuery Color Animations v2.0pre
3
+ * http://jquery.org/
4
+ *
5
+ * Copyright 2011 John Resig
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ * http://jquery.org/license
8
+ */
9
+
10
+ (function( jQuery, undefined ){
11
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color outlineColor".split(" "),
12
+
13
+ // plusequals test for += 100 -= 100
14
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
15
+ // a set of RE's that can match strings and generate color tuples.
16
+ stringParsers = [{
17
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
18
+ parse: function( execResult ) {
19
+ return [
20
+ execResult[ 1 ],
21
+ execResult[ 2 ],
22
+ execResult[ 3 ],
23
+ execResult[ 4 ]
24
+ ];
25
+ }
26
+ }, {
27
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
28
+ parse: function( execResult ) {
29
+ return [
30
+ 2.55 * execResult[1],
31
+ 2.55 * execResult[2],
32
+ 2.55 * execResult[3],
33
+ execResult[ 4 ]
34
+ ];
35
+ }
36
+ }, {
37
+ re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
38
+ parse: function( execResult ) {
39
+ return [
40
+ parseInt( execResult[ 1 ], 16 ),
41
+ parseInt( execResult[ 2 ], 16 ),
42
+ parseInt( execResult[ 3 ], 16 )
43
+ ];
44
+ }
45
+ }, {
46
+ re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,
47
+ parse: function( execResult ) {
48
+ return [
49
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
50
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
51
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
52
+ ];
53
+ }
54
+ }, {
55
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
56
+ space: "hsla",
57
+ parse: function( execResult ) {
58
+ return [
59
+ execResult[1],
60
+ execResult[2] / 100,
61
+ execResult[3] / 100,
62
+ execResult[4]
63
+ ];
64
+ }
65
+ }],
66
+
67
+ // jQuery.Color( )
68
+ color = jQuery.Color = function( color, green, blue, alpha ) {
69
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
70
+ },
71
+ spaces = {
72
+ rgba: {
73
+ cache: "_rgba",
74
+ props: {
75
+ red: {
76
+ idx: 0,
77
+ type: "byte",
78
+ empty: true
79
+ },
80
+ green: {
81
+ idx: 1,
82
+ type: "byte",
83
+ empty: true
84
+ },
85
+ blue: {
86
+ idx: 2,
87
+ type: "byte",
88
+ empty: true
89
+ },
90
+ alpha: {
91
+ idx: 3,
92
+ type: "percent",
93
+ def: 1
94
+ }
95
+ }
96
+ },
97
+ hsla: {
98
+ cache: "_hsla",
99
+ props: {
100
+ hue: {
101
+ idx: 0,
102
+ type: "degrees",
103
+ empty: true
104
+ },
105
+ saturation: {
106
+ idx: 1,
107
+ type: "percent",
108
+ empty: true
109
+ },
110
+ lightness: {
111
+ idx: 2,
112
+ type: "percent",
113
+ empty: true
114
+ }
115
+ }
116
+ }
117
+ },
118
+ propTypes = {
119
+ "byte": {
120
+ floor: true,
121
+ min: 0,
122
+ max: 255
123
+ },
124
+ "percent": {
125
+ min: 0,
126
+ max: 1
127
+ },
128
+ "degrees": {
129
+ mod: 360,
130
+ floor: true
131
+ }
132
+ },
133
+ rgbaspace = spaces.rgba.props,
134
+ support = color.support = {},
135
+
136
+ // colors = jQuery.Color.names
137
+ colors,
138
+
139
+ // local aliases of functions called often
140
+ each = jQuery.each;
141
+
142
+ spaces.hsla.props.alpha = rgbaspace.alpha;
143
+
144
+ function clamp( value, prop, alwaysAllowEmpty ) {
145
+ var type = propTypes[ prop.type ] || {},
146
+ allowEmpty = prop.empty || alwaysAllowEmpty;
147
+
148
+ if ( allowEmpty && value == null ) {
149
+ return null;
150
+ }
151
+ if ( prop.def && value == null ) {
152
+ return prop.def;
153
+ }
154
+ if ( type.floor ) {
155
+ value = ~~value;
156
+ } else {
157
+ value = parseFloat( value );
158
+ }
159
+ if ( value == null || isNaN( value ) ) {
160
+ return prop.def;
161
+ }
162
+ if ( type.mod ) {
163
+ value = value % type.mod;
164
+ // -10 -> 350
165
+ return value < 0 ? type.mod + value : value;
166
+ }
167
+
168
+ // for now all property types without mod have min and max
169
+ return type.min > value ? type.min : type.max < value ? type.max : value;
170
+ }
171
+
172
+ function stringParse( string ) {
173
+ var inst = color(),
174
+ rgba = inst._rgba = [];
175
+
176
+ string = string.toLowerCase();
177
+
178
+ each( stringParsers, function( i, parser ) {
179
+ var match = parser.re.exec( string ),
180
+ values = match && parser.parse( match ),
181
+ parsed,
182
+ spaceName = parser.space || "rgba",
183
+ cache = spaces[ spaceName ].cache;
184
+
185
+
186
+ if ( values ) {
187
+ parsed = inst[ spaceName ]( values );
188
+
189
+ // if this was an rgba parse the assignment might happen twice
190
+ // oh well....
191
+ inst[ cache ] = parsed[ cache ];
192
+ rgba = inst._rgba = parsed._rgba;
193
+
194
+ // exit each( stringParsers ) here because we matched
195
+ return false;
196
+ }
197
+ });
198
+
199
+ // Found a stringParser that handled it
200
+ if ( rgba.length !== 0 ) {
201
+
202
+ // if this came from a parsed string, force "transparent" when alpha is 0
203
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
204
+ if ( Math.max.apply( Math, rgba ) === 0 ) {
205
+ jQuery.extend( rgba, colors.transparent );
206
+ }
207
+ return inst;
208
+ }
209
+
210
+ // named colors / default - filter back through parse function
211
+ if ( string = colors[ string ] ) {
212
+ return string;
213
+ }
214
+ }
215
+
216
+ color.fn = color.prototype = {
217
+ constructor: color,
218
+ parse: function( red, green, blue, alpha ) {
219
+ if ( red === undefined ) {
220
+ this._rgba = [ null, null, null, null ];
221
+ return this;
222
+ }
223
+ if ( red instanceof jQuery || red.nodeType ) {
224
+ red = red instanceof jQuery ? red.css( green ) : jQuery( red ).css( green );
225
+ green = undefined;
226
+ }
227
+
228
+ var inst = this,
229
+ type = jQuery.type( red ),
230
+ rgba = this._rgba = [],
231
+ source;
232
+
233
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
234
+ if ( green !== undefined ) {
235
+ red = [ red, green, blue, alpha ];
236
+ type = "array";
237
+ }
238
+
239
+ if ( type === "string" ) {
240
+ return this.parse( stringParse( red ) || colors._default );
241
+ }
242
+
243
+ if ( type === "array" ) {
244
+ each( rgbaspace, function( key, prop ) {
245
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
246
+ });
247
+ return this;
248
+ }
249
+
250
+ if ( type === "object" ) {
251
+ if ( red instanceof color ) {
252
+ each( spaces, function( spaceName, space ) {
253
+ if ( red[ space.cache ] ) {
254
+ inst[ space.cache ] = red[ space.cache ].slice();
255
+ }
256
+ });
257
+ } else {
258
+ each( spaces, function( spaceName, space ) {
259
+ each( space.props, function( key, prop ) {
260
+ var cache = space.cache;
261
+
262
+ // if the cache doesn't exist, and we know how to convert
263
+ if ( !inst[ cache ] && space.to ) {
264
+
265
+ // if the value was null, we don't need to copy it
266
+ // if the key was alpha, we don't need to copy it either
267
+ if ( red[ key ] == null || key === "alpha") {
268
+ return;
269
+ }
270
+ inst[ cache ] = space.to( inst._rgba );
271
+ }
272
+
273
+ // this is the only case where we allow nulls for ALL properties.
274
+ // call clamp with alwaysAllowEmpty
275
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
276
+ });
277
+ });
278
+ }
279
+ return this;
280
+ }
281
+ },
282
+ is: function( compare ) {
283
+ var is = color( compare ),
284
+ same = true,
285
+ myself = this;
286
+
287
+ each( spaces, function( _, space ) {
288
+ var isCache = is[ space.cache ],
289
+ localCache;
290
+ if (isCache) {
291
+ localCache = myself[ space.cache ] || space.to && space.to( myself._rgba ) || [];
292
+ each( space.props, function( _, prop ) {
293
+ if ( isCache[ prop.idx ] != null ) {
294
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
295
+ return same;
296
+ }
297
+ });
298
+ }
299
+ return same;
300
+ });
301
+ return same;
302
+ },
303
+ _space: function() {
304
+ var used = [],
305
+ inst = this;
306
+ each( spaces, function( spaceName, space ) {
307
+ if ( inst[ space.cache ] ) {
308
+ used.push( spaceName );
309
+ }
310
+ });
311
+ return used.pop();
312
+ },
313
+ transition: function( other, distance ) {
314
+ var end = color( other ),
315
+ spaceName = end._space(),
316
+ space = spaces[ spaceName ],
317
+ start = this[ space.cache ] || space.to( this._rgba ),
318
+ result = start.slice();
319
+
320
+ end = end[ space.cache ];
321
+ each( space.props, function( key, prop ) {
322
+ var index = prop.idx,
323
+ startValue = start[ index ],
324
+ endValue = end[ index ],
325
+ type = propTypes[ prop.type ] || {};
326
+
327
+ // if null, don't override start value
328
+ if ( endValue === null ) {
329
+ return;
330
+ }
331
+ // if null - use end
332
+ if ( startValue === null ) {
333
+ result[ index ] = endValue;
334
+ } else {
335
+ if ( type.mod ) {
336
+ if ( endValue - startValue > type.mod / 2 ) {
337
+ startValue += type.mod;
338
+ } else if ( startValue - endValue > type.mod / 2 ) {
339
+ startValue -= type.mod;
340
+ }
341
+ }
342
+ result[ prop.idx ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
343
+ }
344
+ });
345
+ return this[ spaceName ]( result );
346
+ },
347
+ blend: function( opaque ) {
348
+ // if we are already opaque - return ourself
349
+ if ( this._rgba[ 3 ] === 1 ) {
350
+ return this;
351
+ }
352
+
353
+ var rgb = this._rgba.slice(),
354
+ a = rgb.pop(),
355
+ blend = color( opaque )._rgba;
356
+
357
+ return color( jQuery.map( rgb, function( v, i ) {
358
+ return ( 1 - a ) * blend[ i ] + a * v;
359
+ }));
360
+ },
361
+ toRgbaString: function() {
362
+ var prefix = "rgba(",
363
+ rgba = jQuery.map( this._rgba, function( v, i ) {
364
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
365
+ });
366
+
367
+ if ( rgba[ 3 ] === 1 ) {
368
+ rgba.pop();
369
+ prefix = "rgb(";
370
+ }
371
+
372
+ return prefix + rgba.join(",") + ")";
373
+ },
374
+ toHslaString: function() {
375
+ var prefix = "hsla(",
376
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
377
+ if ( v == null ) {
378
+ v = i > 2 ? 1 : 0;
379
+ }
380
+
381
+ // catch 1 and 2
382
+ if ( i && i < 3 ) {
383
+ v = Math.round( v * 100 ) + "%";
384
+ }
385
+ return v;
386
+ });
387
+
388
+ if ( hsla[ 3 ] === 1 ) {
389
+ hsla.pop();
390
+ prefix = "hsl(";
391
+ }
392
+ return prefix + hsla.join(",") + ")";
393
+ },
394
+ toHexString: function( includeAlpha ) {
395
+ var rgba = this._rgba.slice(),
396
+ alpha = rgba.pop();
397
+
398
+ if ( includeAlpha ) {
399
+ rgba.push( ~~( alpha * 255 ) );
400
+ }
401
+
402
+ return "#" + jQuery.map( rgba, function( v, i ) {
403
+
404
+ // default to 0 when nulls exist
405
+ v = ( v || 0 ).toString( 16 );
406
+ return v.length === 1 ? "0" + v : v;
407
+ }).join("");
408
+ },
409
+ toString: function() {
410
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
411
+ }
412
+ };
413
+ color.fn.parse.prototype = color.fn;
414
+
415
+ // hsla conversions adapted from:
416
+ // http://www.google.com/codesearch/p#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/front-end/Color.js&d=7&l=193
417
+
418
+ function hue2rgb( p, q, h ) {
419
+ h = ( h + 1 ) % 1;
420
+ if ( h * 6 < 1 ) {
421
+ return p + (q - p) * 6 * h;
422
+ }
423
+ if ( h * 2 < 1) {
424
+ return q;
425
+ }
426
+ if ( h * 3 < 2 ) {
427
+ return p + (q - p) * ((2/3) - h) * 6;
428
+ }
429
+ return p;
430
+ }
431
+
432
+ spaces.hsla.to = function ( rgba ) {
433
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
434
+ return [ null, null, null, rgba[ 3 ] ];
435
+ }
436
+ var r = rgba[ 0 ] / 255,
437
+ g = rgba[ 1 ] / 255,
438
+ b = rgba[ 2 ] / 255,
439
+ a = rgba[ 3 ],
440
+ max = Math.max( r, g, b ),
441
+ min = Math.min( r, g, b ),
442
+ diff = max - min,
443
+ add = max + min,
444
+ l = add * 0.5,
445
+ h, s;
446
+
447
+ if ( min === max ) {
448
+ h = 0;
449
+ } else if ( r === max ) {
450
+ h = ( 60 * ( g - b ) / diff ) + 360;
451
+ } else if ( g === max ) {
452
+ h = ( 60 * ( b - r ) / diff ) + 120;
453
+ } else {
454
+ h = ( 60 * ( r - g ) / diff ) + 240;
455
+ }
456
+
457
+ if ( l === 0 || l === 1 ) {
458
+ s = l;
459
+ } else if ( l <= 0.5 ) {
460
+ s = diff / add;
461
+ } else {
462
+ s = diff / ( 2 - add );
463
+ }
464
+ return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
465
+ };
466
+
467
+ spaces.hsla.from = function ( hsla ) {
468
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
469
+ return [ null, null, null, hsla[ 3 ] ];
470
+ }
471
+ var h = hsla[ 0 ] / 360,
472
+ s = hsla[ 1 ],
473
+ l = hsla[ 2 ],
474
+ a = hsla[ 3 ],
475
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
476
+ p = 2 * l - q,
477
+ r, g, b;
478
+
479
+ return [
480
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
481
+ Math.round( hue2rgb( p, q, h ) * 255 ),
482
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
483
+ a
484
+ ];
485
+ };
486
+
487
+
488
+ each( spaces, function( spaceName, space ) {
489
+ var props = space.props,
490
+ cache = space.cache,
491
+ to = space.to,
492
+ from = space.from;
493
+
494
+ // makes rgba() and hsla()
495
+ color.fn[ spaceName ] = function( value ) {
496
+
497
+ // generate a cache for this space if it doesn't exist
498
+ if ( to && !this[ cache ] ) {
499
+ this[ cache ] = to( this._rgba );
500
+ }
501
+ if ( value === undefined ) {
502
+ return this[ cache ].slice();
503
+ }
504
+
505
+ var type = jQuery.type( value ),
506
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
507
+ local = this[ cache ].slice(),
508
+ ret;
509
+
510
+ each( props, function( key, prop ) {
511
+ var val = arr[ type === "object" ? key : prop.idx ];
512
+ if ( val == null ) {
513
+ val = local[ prop.idx ];
514
+ }
515
+ local[ prop.idx ] = clamp( val, prop );
516
+ });
517
+
518
+ if ( from ) {
519
+ ret = color( from( local ) );
520
+ ret[ cache ] = local;
521
+ return ret;
522
+ } else {
523
+ return color( local );
524
+ }
525
+ };
526
+
527
+ // makes red() green() blue() alpha() hue() saturation() lightness()
528
+ each( props, function( key, prop ) {
529
+ // alpha is included in more than one space
530
+ if ( color.fn[ key ] ) {
531
+ return;
532
+ }
533
+ color.fn[ key ] = function( value ) {
534
+ var vtype = jQuery.type( value ),
535
+ fn = ( key === 'alpha' ? ( this._hsla ? 'hsla' : 'rgba' ) : spaceName ),
536
+ local = this[ fn ](),
537
+ cur = local[ prop.idx ],
538
+ match;
539
+
540
+ if ( vtype === "undefined" ) {
541
+ return cur;
542
+ }
543
+
544
+ if ( vtype === "function" ) {
545
+ value = value.call( this, cur );
546
+ vtype = jQuery.type( value );
547
+ }
548
+ if ( value == null && prop.empty ) {
549
+ return this;
550
+ }
551
+ if ( vtype === "string" ) {
552
+ match = rplusequals.exec( value );
553
+ if ( match ) {
554
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
555
+ }
556
+ }
557
+ local[ prop.idx ] = value;
558
+ return this[ fn ]( local );
559
+ };
560
+ });
561
+ });
562
+
563
+ // add .fx.step functions
564
+ each( stepHooks, function( i, hook ) {
565
+ jQuery.cssHooks[ hook ] = {
566
+ set: function( elem, value ) {
567
+ var parsed, backgroundColor, curElem;
568
+
569
+ if ( jQuery.type( value ) !== 'string' || ( parsed = stringParse( value ) ) )
570
+ {
571
+ value = color( parsed || value );
572
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
573
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
574
+ do {
575
+ backgroundColor = jQuery.curCSS( curElem, "backgroundColor" );
576
+ } while (
577
+ ( backgroundColor === "" || backgroundColor === "transparent" ) &&
578
+ ( curElem = curElem.parentNode ) &&
579
+ curElem.style
580
+ );
581
+
582
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
583
+ backgroundColor :
584
+ "_default" );
585
+ }
586
+
587
+ value = value.toRgbaString();
588
+ }
589
+ elem.style[ hook ] = value;
590
+ }
591
+ };
592
+ jQuery.fx.step[ hook ] = function( fx ) {
593
+ if ( !fx.colorInit ) {
594
+ fx.start = color( fx.elem, hook );
595
+ fx.end = color( fx.end );
596
+ fx.colorInit = true;
597
+ }
598
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
599
+ };
600
+ });
601
+
602
+ // detect rgba support
603
+ jQuery(function() {
604
+ var div = document.createElement( "div" ),
605
+ div_style = div.style;
606
+
607
+ div_style.cssText = "background-color:rgba(1,1,1,.5)";
608
+ support.rgba = div_style.backgroundColor.indexOf( "rgba" ) > -1;
609
+ });
610
+
611
+ // Some named colors to work with
612
+ // From Interface by Stefan Petre
613
+ // http://interface.eyecon.ro/
614
+ colors = jQuery.Color.names = {
615
+ aqua: "#00ffff",
616
+ azure: "#f0ffff",
617
+ beige: "#f5f5dc",
618
+ black: "#000000",
619
+ blue: "#0000ff",
620
+ brown: "#a52a2a",
621
+ cyan: "#00ffff",
622
+ darkblue: "#00008b",
623
+ darkcyan: "#008b8b",
624
+ darkgrey: "#a9a9a9",
625
+ darkgreen: "#006400",
626
+ darkkhaki: "#bdb76b",
627
+ darkmagenta: "#8b008b",
628
+ darkolivegreen: "#556b2f",
629
+ darkorange: "#ff8c00",
630
+ darkorchid: "#9932cc",
631
+ darkred: "#8b0000",
632
+ darksalmon: "#e9967a",
633
+ darkviolet: "#9400d3",
634
+ fuchsia: "#ff00ff",
635
+ gold: "#ffd700",
636
+ green: "#008000",
637
+ indigo: "#4b0082",
638
+ khaki: "#f0e68c",
639
+ lightblue: "#add8e6",
640
+ lightcyan: "#e0ffff",
641
+ lightgreen: "#90ee90",
642
+ lightgrey: "#d3d3d3",
643
+ lightpink: "#ffb6c1",
644
+ lightyellow: "#ffffe0",
645
+ lime: "#00ff00",
646
+ magenta: "#ff00ff",
647
+ maroon: "#800000",
648
+ navy: "#000080",
649
+ olive: "#808000",
650
+ orange: "#ffa500",
651
+ pink: "#ffc0cb",
652
+ purple: "#800080",
653
+ violet: "#800080",
654
+ red: "#ff0000",
655
+ silver: "#c0c0c0",
656
+ white: "#ffffff",
657
+ yellow: "#ffff00",
658
+ transparent: [ null, null, null, 0 ],
659
+ _default: "#ffffff"
660
+ };
661
+ })( jQuery );