kitsune 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/README.textile +5 -0
  2. data/Rakefile +21 -0
  3. data/app/controllers/admin/kitsune/models_controller.rb +13 -0
  4. data/app/controllers/admin/kitsune/pages_controller.rb +27 -0
  5. data/app/controllers/admin/kitsune/records_controller.rb +55 -0
  6. data/app/controllers/kitsune_controller.rb +5 -0
  7. data/app/helpers/admin/kitsune/records_helper.rb +19 -0
  8. data/app/views/admin/kitsune/models/_form.html.erb +16 -0
  9. data/app/views/admin/kitsune/models/index.html.erb +3 -0
  10. data/app/views/admin/kitsune/pages/_form.html.erb +13 -0
  11. data/app/views/admin/kitsune/pages/edit.html.erb +7 -0
  12. data/app/views/admin/kitsune/pages/index.html.erb +5 -0
  13. data/app/views/admin/kitsune/pages/new.html.erb +7 -0
  14. data/app/views/admin/kitsune/records/_form.html.erb +14 -0
  15. data/app/views/admin/kitsune/records/edit.html.erb +7 -0
  16. data/app/views/admin/kitsune/records/index.html.erb +36 -0
  17. data/app/views/admin/kitsune/records/new.html.erb +7 -0
  18. data/app/views/kitsune/show.html.erb +1 -0
  19. data/app/views/layouts/admin/kitsune.html.erb +15 -0
  20. data/config/kitsune_routes.rb +11 -0
  21. data/generators/kitsune/kitsune_generator.rb +26 -0
  22. data/generators/kitsune/lib/insert_commands.rb +31 -0
  23. data/generators/kitsune/templates/images/bg.jpg +0 -0
  24. data/generators/kitsune/templates/images/form-bg.gif +0 -0
  25. data/generators/kitsune/templates/images/grey-btn.png +0 -0
  26. data/generators/kitsune/templates/images/nicEditorIcons.gif +0 -0
  27. data/generators/kitsune/templates/javascripts/nicEdit.js +102 -0
  28. data/generators/kitsune/templates/migrations/create_pages.rb +14 -0
  29. data/generators/kitsune/templates/page.rb +3 -0
  30. data/generators/kitsune/templates/stylesheets/global.css +381 -0
  31. data/lib/kitsune.rb +37 -0
  32. data/lib/kitsune/active_record.rb +29 -0
  33. data/lib/kitsune/builder.rb +92 -0
  34. data/lib/kitsune/extensions/routes.rb +14 -0
  35. data/lib/kitsune/faux_column.rb +11 -0
  36. data/lib/kitsune/form_helper_ext.rb +12 -0
  37. data/lib/kitsune/inspector.rb +137 -0
  38. data/lib/kitsune/page.rb +18 -0
  39. data/rails/init.rb +3 -0
  40. metadata +102 -0
@@ -0,0 +1,5 @@
1
+ h1. Kitsune
2
+
3
+ A drop in Rails CMS
4
+
5
+ *This is still being developed and is currently barely useable*
@@ -0,0 +1,21 @@
1
+ require 'rake'
2
+
3
+ gem_spec = Gem::Specification.new do |gem_spec|
4
+ gem_spec.name = "kitsune"
5
+ gem_spec.version = "0.0.2"
6
+ gem_spec.summary = "Integrated Rails Content Management System."
7
+ gem_spec.email = "matt@toastyapps.com"
8
+ gem_spec.homepage = "http://github.com/toastyapps/kitsune"
9
+ gem_spec.description = "Integrated Rails Content Management System."
10
+ gem_spec.authors = ["Matthew Mongeau <matt@toastyapps.com>"]
11
+ gem_spec.files = FileList["[A-Z]*", "{app,config,generators,lib,rails}/**/*"]
12
+ gem_spec.requirements << "mislav-will_paginate"
13
+ gem_spec.add_dependency('mislav-will_paginate', '~> 2.3.11')
14
+ end
15
+
16
+ desc "Generate gemspec file"
17
+ task :gemspec do
18
+ File.open("#{gem_spec.name}.gemspec", 'w') do |f|
19
+ f.write gem_spec.to_yaml
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ class Admin::Kitsune::ModelsController < ApplicationController
2
+ layout 'admin/kitsune'
3
+
4
+ before_filter :load_model
5
+ def index
6
+ @models = Kitsune.models_with_admin
7
+ end
8
+
9
+ private
10
+ def load_model
11
+ @model = Kitsune::Inspector.new(params[:id].constantize) if params[:id]
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ class Admin::Kitsune::PagesController < ApplicationController
2
+ layout 'admin/kitsune'
3
+
4
+ before_filter :load_page
5
+
6
+ def index
7
+ @pages = ::Page.all
8
+ end
9
+
10
+ def new
11
+ @page = ::Page.new
12
+ end
13
+
14
+ def create
15
+ @page = ::Page.new(params[:page])
16
+ if @page.save
17
+ redirect_to admin_kitsune_pages_path
18
+ else
19
+ render 'new'
20
+ end
21
+ end
22
+
23
+ private
24
+ def load_page
25
+ @page = Page.find_by_url(params[:id]) if params[:id]
26
+ end
27
+ end
@@ -0,0 +1,55 @@
1
+ class Admin::Kitsune::RecordsController < ApplicationController
2
+ layout 'admin/kitsune'
3
+
4
+ before_filter :load_model
5
+ before_filter :load_record
6
+
7
+ def index
8
+ order, @sort_param, @sort_dir = nil, nil, nil
9
+ if params[:sort]
10
+ @sort_param = params[:sort]
11
+ @sort_dir = params[:sort_dir]
12
+ order = "#{params[:sort]} #{params[:sort_dir]}"
13
+ end
14
+ @records = @model.paginate(:page => params[:page], :order => order)
15
+ end
16
+
17
+ def new
18
+ @record = @model.new_record
19
+ end
20
+
21
+ def create
22
+ @record = @model.new_record(params[params[:model_id].underscore])
23
+ if @record.save
24
+ flash[:notice] = "Record Saved"
25
+ redirect_to admin_kitsune_model_records_path(params[:model_id])
26
+ else
27
+ flash[:notice] = "Could not save record"
28
+ render 'new'
29
+ end
30
+ end
31
+
32
+ def update
33
+ if @record.update_attributes(params[params[:model_id].underscore])
34
+ flash[:notice] = "Record Saved"
35
+ redirect_to admin_kitsune_model_records_path(params[:model_id])
36
+ else
37
+ flash[:notice] = "Could not save record"
38
+ render 'edit'
39
+ end
40
+ end
41
+
42
+ def destroy
43
+ @record.destroy
44
+ flash[:notice] = "Record Deleted"
45
+ redirect_to admin_kitsune_model_records_path(params[:model_id])
46
+ end
47
+
48
+ private
49
+ def load_model
50
+ @model = Kitsune::Inspector.new(params[:model_id].constantize) if params[:model_id]
51
+ end
52
+ def load_record
53
+ @record = @model.find(params[:id]) if params[:id]
54
+ end
55
+ end
@@ -0,0 +1,5 @@
1
+ class KitsuneController < ApplicationController
2
+ def show
3
+ @page = ::Page.find_by_url(params[:url].join('/'))
4
+ end
5
+ end
@@ -0,0 +1,19 @@
1
+ module Admin::Kitsune::RecordsHelper
2
+ def url_for_record(record)
3
+ record.new_record? ? admin_kitsune_model_records_path(record.class.to_s) : admin_kitsune_model_record_path(record.class.to_s, record.id)
4
+ end
5
+
6
+ def sort_link_to(resource, column)
7
+ if resource.column_sortable(column)
8
+ ascending = params[:sort] == column.name && params[:sort_dir] == 'DESC'
9
+ options = {
10
+ :model => resource.object,
11
+ :sort => column.name,
12
+ :sort_dir => (ascending ? 'ASC' : 'DESC')
13
+ }
14
+ link_to column.name.to_s.titleize + (ascending ? ' &darr;' : ' &uarr;'), options
15
+ else
16
+ column.name.to_s.titleize
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ <% form_for @resource, :url => url_for(:action => (@resource.new_record? ? 'create' : 'update'), :model => @model.to_s), :method => (@resource.new_record? ? :post : :put) do |form| %>
2
+ <fieldset>
3
+ <%= form.error_messages %>
4
+ <% @columns.each do |column| %>
5
+ <% unless column.primary %>
6
+ <div class='field'>
7
+ <%= form.label column.name %>
8
+ <%= field_for(form, column, @resource.send(column.name)) %>
9
+ </div>
10
+ <% end %>
11
+ <% end %>
12
+ <div class="formSubmit">
13
+ <button value="submit" class="submitBtn"><span>Save</span></button>
14
+ </div>
15
+ </fieldset>
16
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% @models.each do |model| %>
2
+ <%= link_to model, admin_kitsune_model_records_path(model) %>
3
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <% form_for [:admin, :kitsune, @page] do |f| %>
2
+ <div class='field'>
3
+ <%= f.label :title %>
4
+ <%= f.text_field :title %>
5
+ </div>
6
+ <div class='field'>
7
+ <%= f.label :body %>
8
+ <%= f.wysiwyg :body %>
9
+ </div>
10
+ <div class='submit_button'>
11
+ <%= f.submit 'Save' %>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <div id='menu'>
2
+ <%= link_to 'Back', admin_kitsune_pages_path %>
3
+ </div>
4
+ <div id='body'>
5
+ <h2 class='legend'>Edit Page</h3>
6
+ <%= render 'form' %>
7
+ </div>
@@ -0,0 +1,5 @@
1
+ <% @pages.each do |page| %>
2
+ <%= page.title %>
3
+ <% end %>
4
+
5
+ <%= link_to 'New Page', new_admin_kitsune_page_path %>
@@ -0,0 +1,7 @@
1
+ <div id='menu'>
2
+ <%= link_to 'Back', admin_kitsune_pages_path %>
3
+ </div>
4
+ <div id='body'>
5
+ <h2 class='legend'>New Page</h3>
6
+ <%= render 'form' %>
7
+ </div>
@@ -0,0 +1,14 @@
1
+ <% form_for(@record, {:url => url_for_record(@record)}.merge(@model.form_options_for(@record))) do |form| %>
2
+ <fieldset>
3
+ <%= form.error_messages %>
4
+ <% @model.columns(:edit).each do |column| %>
5
+ <div class='field'>
6
+ <%= form.label column.name %>
7
+ <%= form.send(@model.form_type(column), column.name, *@model.options_for(column)) %>
8
+ </div>
9
+ <% end %>
10
+ <div class="submit_button">
11
+ <button value="Save" class="submitBtn"><span>Save</span></button>
12
+ </div>
13
+ </fieldset>
14
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <div id='menu'>
2
+ <%= link_to 'Back', admin_kitsune_model_records_path(params[:model_id]) %>
3
+ </div>
4
+ <div id='body'>
5
+ <h2 class='legend'>Edit <%= params[:model_id] %></h3>
6
+ <%= render 'form' %>
7
+ </div>
@@ -0,0 +1,36 @@
1
+ <div id='menu'>
2
+ <%= link_to 'Back', admin_kitsune_models_path %>
3
+ |
4
+ <%= link_to "New #{params[:id]}", new_admin_kitsune_model_record_path(params[:model_id]) %>
5
+ </div>
6
+ <div id='body'>
7
+ <% @model.tabs.each do |key, value|%>
8
+ <%= link_to key, value %>
9
+ <% end %>
10
+ <table>
11
+ <thead>
12
+ <tr>
13
+ <% @model.columns(:display).each do |column| %>
14
+ <th><%= sort_link_to(@model, column) %></th>
15
+ <% end %>
16
+ <th>Actions</th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <% @records.each do |record| %>
21
+ <tr class="<%= cycle('odd', 'even') %>">
22
+ <% @model.columns(:display).each do |column| %>
23
+ <td><%= truncate(sanitize(record.send(column.name).to_s), :length => 20) %></td>
24
+ <% end %>
25
+ <td>
26
+ <%= link_to 'Edit', edit_admin_kitsune_model_record_path(params[:model_id], record.id) %>
27
+ -
28
+ <%= link_to 'Delete', admin_kitsune_model_record_path(params[:model_id], record.id), :method => :delete, :confirm => "Are you sure?" %>
29
+ </td>
30
+ </tr>
31
+ <% end %>
32
+ </tbody>
33
+ </table>
34
+
35
+ <%= will_paginate @records %>
36
+ </div>
@@ -0,0 +1,7 @@
1
+ <div id='menu'>
2
+ <%= link_to 'Back', admin_kitsune_model_records_path(params[:model_id]) %>
3
+ </div>
4
+ <div id='body'>
5
+ <h2 class='legend'>New <%= params[:model_id] %></h3>
6
+ <%= render 'form' %>
7
+ </div>
@@ -0,0 +1 @@
1
+ <%= @page.body %>
@@ -0,0 +1,15 @@
1
+ <html>
2
+ <head>
3
+ <title>Kitsune CMS</title>
4
+ <%= stylesheet_link_tag 'kitsune/global.css' %>
5
+ <%= javascript_include_tag 'kitsune/nicEdit.js' %>
6
+ </head>
7
+ <body>
8
+ <div id='content'>
9
+ <div id='header'>
10
+ <h1><a href='/admin/models'>Kitsune</a></h1>
11
+ </div>
12
+ <%= yield %>
13
+ </div>
14
+ </body>
15
+ </html>
@@ -0,0 +1,11 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ map.connect '/admin/kitsune', :controller => 'admin/kitsune/models'
3
+ map.namespace :admin do |admin|
4
+ admin.namespace :kitsune do |kitsune|
5
+ kitsune.resources :pages
6
+ kitsune.resources :models, :has_many => [:records]
7
+ end
8
+ end
9
+
10
+ map.connect '/*url', :controller => 'kitsune', :action => 'show'
11
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/lib/insert_commands.rb")
2
+ class KitsuneGenerator < Rails::Generator::Base
3
+ def manifest
4
+ record do |m|
5
+ page_model = "app/models/page.rb"
6
+ if File.exists?(page_model)
7
+ m.insert_into page_model, "include Kitsune::Page"
8
+ else
9
+ m.directory File.join("app", "models")
10
+ m.file "page.rb", page_model
11
+ m.migration_template "migrations/create_pages.rb", 'db/migrate', :migration_file_name => "kitsune_create_pages"
12
+ end
13
+
14
+ m.directory "public/javascripts/kitsune/"
15
+ m.file "javascripts/nicEdit.js", "public/javascripts/kitsune/nicEdit.js"
16
+ m.directory "public/stylesheets/kitsune/"
17
+ m.file "stylesheets/global.css", "public/stylesheets/kitsune/global.css"
18
+ m.directory "public/images/kitsune/"
19
+ %w[bg.jpg form-bg.gif grey-btn.png nicEditorIcons.gif].each do |image|
20
+ m.file "images/#{image}", "public/images/kitsune/#{image}"
21
+ end
22
+
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,31 @@
1
+ Rails::Generator::Commands::Base.class_eval do
2
+ def file_contains?(relative_destination, line)
3
+ File.read(destination_path(relative_destination)).include?(line)
4
+ end
5
+ end
6
+
7
+ Rails::Generator::Commands::Create.class_eval do
8
+ def insert_into(file, line)
9
+ logger.insert "#{line} into #{file}"
10
+ unless options[:pretend] || file_contains?(file, line)
11
+ gsub_file file, /^(class|module) .+$/ do |match|
12
+ "#{match}\n #{line}"
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ Rails::Generator::Commands::Destroy.class_eval do
19
+ def insert_into(file, line)
20
+ logger.remove "#{line} from #{file}"
21
+ unless options[:pretend]
22
+ gsub_file file, "\n #{line}", ''
23
+ end
24
+ end
25
+ end
26
+
27
+ Rails::Generator::Commands::List.class_eval do
28
+ def insert_into(file, line)
29
+ logger.insert "#{line} into #{file}"
30
+ end
31
+ end
@@ -0,0 +1,102 @@
1
+ /* NicEdit - Micro Inline WYSIWYG
2
+ * Copyright 2007-2008 Brian Kirchoff
3
+ *
4
+ * NicEdit is distributed under the terms of the MIT license
5
+ * For more information visit http://nicedit.com/
6
+ * Do not remove this copyright message
7
+ */
8
+ var bkExtend=function(){var A=arguments;if(A.length==1){A=[this,A[0]]}for(var B in A[1]){A[0][B]=A[1][B]}return A[0]};function bkClass(){}bkClass.prototype.construct=function(){};bkClass.extend=function(C){var A=function(){if(arguments[0]!==bkClass){return this.construct.apply(this,arguments)}};var B=new this(bkClass);bkExtend(B,C);A.prototype=B;A.extend=this.extend;return A};var bkElement=bkClass.extend({construct:function(B,A){if(typeof (B)=="string"){B=(A||document).createElement(B)}B=$BK(B);return B},appendTo:function(A){A.appendChild(this);return this},appendBefore:function(A){A.parentNode.insertBefore(this,A);return this},addEvent:function(B,A){bkLib.addEvent(this,B,A);return this},setContent:function(A){this.innerHTML=A;return this},pos:function(){var C=curtop=0;var B=obj=this;if(obj.offsetParent){do{C+=obj.offsetLeft;curtop+=obj.offsetTop}while(obj=obj.offsetParent)}var A=(!window.opera)?parseInt(this.getStyle("border-width")||this.style.border)||0:0;return[C+A,curtop+A+this.offsetHeight]},noSelect:function(){bkLib.noSelect(this);return this},parentTag:function(A){var B=this;do{if(B&&B.nodeName&&B.nodeName.toUpperCase()==A){return B}B=B.parentNode}while(B);return false},hasClass:function(A){return this.className.match(new RegExp("(\\s|^)nicEdit-"+A+"(\\s|$)"))},addClass:function(A){if(!this.hasClass(A)){this.className+=" nicEdit-"+A}return this},removeClass:function(A){if(this.hasClass(A)){this.className=this.className.replace(new RegExp("(\\s|^)nicEdit-"+A+"(\\s|$)")," ")}return this},setStyle:function(A){var B=this.style;for(var C in A){switch(C){case"float":B.cssFloat=B.styleFloat=A[C];break;case"opacity":B.opacity=A[C];B.filter="alpha(opacity="+Math.round(A[C]*100)+")";break;case"className":this.className=A[C];break;default:B[C]=A[C]}}return this},getStyle:function(A,C){var B=(!C)?document.defaultView:C;if(this.nodeType==1){return(B&&B.getComputedStyle)?B.getComputedStyle(this,null).getPropertyValue(A):this.currentStyle[bkLib.camelize(A)]}},remove:function(){this.parentNode.removeChild(this);return this},setAttributes:function(A){for(var B in A){this[B]=A[B]}return this}});var bkLib={isMSIE:(navigator.appVersion.indexOf("MSIE")!=-1),addEvent:function(C,B,A){(C.addEventListener)?C.addEventListener(B,A,false):C.attachEvent("on"+B,A)},toArray:function(C){var B=C.length,A=new Array(B);while(B--){A[B]=C[B]}return A},noSelect:function(B){if(B.setAttribute&&B.nodeName.toLowerCase()!="input"&&B.nodeName.toLowerCase()!="textarea"){B.setAttribute("unselectable","on")}for(var A=0;A<B.childNodes.length;A++){bkLib.noSelect(B.childNodes[A])}},camelize:function(A){return A.replace(/\-(.)/g,function(B,C){return C.toUpperCase()})},inArray:function(A,B){return(bkLib.search(A,B)!=null)},search:function(A,C){for(var B=0;B<A.length;B++){if(A[B]==C){return B}}return null},cancelEvent:function(A){A=A||window.event;if(A.preventDefault&&A.stopPropagation){A.preventDefault();A.stopPropagation()}return false},domLoad:[],domLoaded:function(){if(arguments.callee.done){return }arguments.callee.done=true;for(i=0;i<bkLib.domLoad.length;i++){bkLib.domLoad[i]()}},onDomLoaded:function(A){this.domLoad.push(A);if(document.addEventListener){document.addEventListener("DOMContentLoaded",bkLib.domLoaded,null)}else{if(bkLib.isMSIE){document.write("<style>.nicEdit-main p { margin: 0; }</style><script id=__ie_onload defer "+((location.protocol=="https:")?"src='javascript:void(0)'":"src=//0")+"><\/script>");$BK("__ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){bkLib.domLoaded()}}}}window.onload=bkLib.domLoaded}};function $BK(A){if(typeof (A)=="string"){A=document.getElementById(A)}return(A&&!A.appendTo)?bkExtend(A,bkElement.prototype):A}var bkEvent={addEvent:function(A,B){if(B){this.eventList=this.eventList||{};this.eventList[A]=this.eventList[A]||[];this.eventList[A].push(B)}return this},fireEvent:function(){var A=bkLib.toArray(arguments),C=A.shift();if(this.eventList&&this.eventList[C]){for(var B=0;B<this.eventList[C].length;B++){this.eventList[C][B].apply(this,A)}}}};function __(A){return A}Function.prototype.closure=function(){var A=this,B=bkLib.toArray(arguments),C=B.shift();return function(){if(typeof (bkLib)!="undefined"){return A.apply(C,B.concat(bkLib.toArray(arguments)))}}};Function.prototype.closureListener=function(){var A=this,C=bkLib.toArray(arguments),B=C.shift();return function(E){E=E||window.event;if(E.target){var D=E.target}else{var D=E.srcElement}return A.apply(B,[E,D].concat(C))}};
9
+
10
+
11
+
12
+ var nicEditorConfig = bkClass.extend({
13
+ buttons : {
14
+ 'bold' : {name : __('Click to Bold'), command : 'Bold', tags : ['B','STRONG'], css : {'font-weight' : 'bold'}, key : 'b'},
15
+ 'italic' : {name : __('Click to Italic'), command : 'Italic', tags : ['EM','I'], css : {'font-style' : 'italic'}, key : 'i'},
16
+ 'underline' : {name : __('Click to Underline'), command : 'Underline', tags : ['U'], css : {'text-decoration' : 'underline'}, key : 'u'},
17
+ 'left' : {name : __('Left Align'), command : 'justifyleft', noActive : true},
18
+ 'center' : {name : __('Center Align'), command : 'justifycenter', noActive : true},
19
+ 'right' : {name : __('Right Align'), command : 'justifyright', noActive : true},
20
+ 'justify' : {name : __('Justify Align'), command : 'justifyfull', noActive : true},
21
+ 'ol' : {name : __('Insert Ordered List'), command : 'insertorderedlist', tags : ['OL']},
22
+ 'ul' : {name : __('Insert Unordered List'), command : 'insertunorderedlist', tags : ['UL']},
23
+ 'subscript' : {name : __('Click to Subscript'), command : 'subscript', tags : ['SUB']},
24
+ 'superscript' : {name : __('Click to Superscript'), command : 'superscript', tags : ['SUP']},
25
+ 'strikethrough' : {name : __('Click to Strike Through'), command : 'strikeThrough', css : {'text-decoration' : 'line-through'}},
26
+ 'removeformat' : {name : __('Remove Formatting'), command : 'removeformat', noActive : true},
27
+ 'indent' : {name : __('Indent Text'), command : 'indent', noActive : true},
28
+ 'outdent' : {name : __('Remove Indent'), command : 'outdent', noActive : true},
29
+ 'hr' : {name : __('Horizontal Rule'), command : 'insertHorizontalRule', noActive : true}
30
+ },
31
+ iconsPath : '/images/kitsune/nicEditorIcons.gif',
32
+ buttonList : ['save','bold','italic','underline','left','center','right','justify','ol','ul','fontSize','fontFamily','fontFormat','indent','outdent','image','upload','link','unlink','forecolor','bgcolor'],
33
+ iconList : {"bgcolor":1,"forecolor":2,"bold":3,"center":4,"hr":5,"indent":6,"italic":7,"justify":8,"left":9,"ol":10,"outdent":11,"removeformat":12,"right":13,"save":24,"strikethrough":15,"subscript":16,"superscript":17,"ul":18,"underline":19,"image":20,"link":21,"unlink":22,"close":23,"arrow":25}
34
+
35
+ });
36
+ ;
37
+ var nicEditors={nicPlugins:[],editors:[],registerPlugin:function(B,A){this.nicPlugins.push({p:B,o:A})},allTextAreas:function(C){var A=document.getElementsByTagName("textarea");for(var B=0;B<A.length;B++){nicEditors.editors.push(new nicEditor(C).panelInstance(A[B]))}return nicEditors.editors},findEditor:function(C){var B=nicEditors.editors;for(var A=0;A<B.length;A++){if(B[A].instanceById(C)){return B[A].instanceById(C)}}}};var nicEditor=bkClass.extend({construct:function(C){this.options=new nicEditorConfig();bkExtend(this.options,C);this.nicInstances=new Array();this.loadedPlugins=new Array();var A=nicEditors.nicPlugins;for(var B=0;B<A.length;B++){this.loadedPlugins.push(new A[B].p(this,A[B].o))}nicEditors.editors.push(this);bkLib.addEvent(document.body,"mousedown",this.selectCheck.closureListener(this))},panelInstance:function(B,C){B=this.checkReplace($BK(B));var A=new bkElement("DIV").setStyle({width:(parseInt(B.getStyle("width"))||B.clientWidth)+"px"}).appendBefore(B);this.setPanel(A);return this.addInstance(B,C)},checkReplace:function(B){var A=nicEditors.findEditor(B);if(A){A.removeInstance(B);A.removePanel()}return B},addInstance:function(B,C){B=this.checkReplace($BK(B));if(B.contentEditable||!!window.opera){var A=new nicEditorInstance(B,C,this)}else{var A=new nicEditorIFrameInstance(B,C,this)}this.nicInstances.push(A);return this},removeInstance:function(C){C=$BK(C);var B=this.nicInstances;for(var A=0;A<B.length;A++){if(B[A].e==C){B[A].remove();this.nicInstances.splice(A,1)}}},removePanel:function(A){if(this.nicPanel){this.nicPanel.remove();this.nicPanel=null}},instanceById:function(C){C=$BK(C);var B=this.nicInstances;for(var A=0;A<B.length;A++){if(B[A].e==C){return B[A]}}},setPanel:function(A){this.nicPanel=new nicEditorPanel($BK(A),this.options,this);this.fireEvent("panel",this.nicPanel);return this},nicCommand:function(B,A){if(this.selectedInstance){this.selectedInstance.nicCommand(B,A)}},getIcon:function(D,A){var C=this.options.iconList[D];var B=(A.iconFiles)?A.iconFiles[D]:"";return{backgroundImage:"url('"+((C)?this.options.iconsPath:B)+"')",backgroundPosition:((C)?((C-1)*-18):0)+"px 0px"}},selectCheck:function(C,A){var B=false;do{if(A.className&&A.className.indexOf("nicEdit")!=-1){return false}}while(A=A.parentNode);this.fireEvent("blur",this.selectedInstance,A);this.lastSelectedInstance=this.selectedInstance;this.selectedInstance=null;return false}});nicEditor=nicEditor.extend(bkEvent);
38
+ var nicEditorInstance=bkClass.extend({isSelected:false,construct:function(G,D,C){this.ne=C;this.elm=this.e=G;this.options=D||{};newX=parseInt(G.getStyle("width"))||G.clientWidth;newY=parseInt(G.getStyle("height"))||G.clientHeight;this.initialHeight=newY-8;var H=(G.nodeName.toLowerCase()=="textarea");if(H||this.options.hasPanel){var B=(bkLib.isMSIE&&!((typeof document.body.style.maxHeight!="undefined")&&document.compatMode=="CSS1Compat"));var E={width:newX+"px",border:"1px solid #ccc",borderTop:0,overflowY:"auto",overflowX:"hidden"};E[(B)?"height":"maxHeight"]=(this.ne.options.maxHeight)?this.ne.options.maxHeight+"px":null;this.editorContain=new bkElement("DIV").setStyle(E).appendBefore(G);var A=new bkElement("DIV").setStyle({width:(newX-8)+"px",margin:"4px",minHeight:newY+"px"}).addClass("main").appendTo(this.editorContain);G.setStyle({display:"none"});A.innerHTML=G.innerHTML;if(H){A.setContent(G.value);this.copyElm=G;var F=G.parentTag("FORM");if(F){bkLib.addEvent(F,"submit",this.saveContent.closure(this))}}A.setStyle((B)?{height:newY+"px"}:{overflow:"hidden"});this.elm=A}this.ne.addEvent("blur",this.blur.closure(this));this.init();this.blur()},init:function(){this.elm.setAttribute("contentEditable","true");if(this.getContent()==""){this.setContent("<br />")}this.instanceDoc=document.defaultView;this.elm.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keypress",this.keyDown.closureListener(this)).addEvent("focus",this.selected.closure(this)).addEvent("blur",this.blur.closure(this)).addEvent("keyup",this.selected.closure(this));this.ne.fireEvent("add",this)},remove:function(){this.saveContent();if(this.copyElm||this.options.hasPanel){this.editorContain.remove();this.e.setStyle({display:"block"});this.ne.removePanel()}this.disable();this.ne.fireEvent("remove",this)},disable:function(){this.elm.setAttribute("contentEditable","false")},getSel:function(){return(window.getSelection)?window.getSelection():document.selection},getRng:function(){var A=this.getSel();if(!A){return null}return(A.rangeCount>0)?A.getRangeAt(0):A.createRange()},selRng:function(A,B){if(window.getSelection){B.removeAllRanges();B.addRange(A)}else{A.select()}},selElm:function(){var C=this.getRng();if(C.startContainer){var D=C.startContainer;if(C.cloneContents().childNodes.length==1){for(var B=0;B<D.childNodes.length;B++){var A=D.childNodes[B].ownerDocument.createRange();A.selectNode(D.childNodes[B]);if(C.compareBoundaryPoints(Range.START_TO_START,A)!=1&&C.compareBoundaryPoints(Range.END_TO_END,A)!=-1){return $BK(D.childNodes[B])}}}return $BK(D)}else{return $BK((this.getSel().type=="Control")?C.item(0):C.parentElement())}},saveRng:function(){this.savedRange=this.getRng();this.savedSel=this.getSel()},restoreRng:function(){if(this.savedRange){this.selRng(this.savedRange,this.savedSel)}},keyDown:function(B,A){if(B.ctrlKey){this.ne.fireEvent("key",this,B)}},selected:function(C,A){if(!A){A=this.selElm()}if(!C.ctrlKey){var B=this.ne.selectedInstance;if(B!=this){if(B){this.ne.fireEvent("blur",B,A)}this.ne.selectedInstance=this;this.ne.fireEvent("focus",B,A)}this.ne.fireEvent("selected",B,A);this.isFocused=true;this.elm.addClass("selected")}return false},blur:function(){this.isFocused=false;this.elm.removeClass("selected")},saveContent:function(){if(this.copyElm||this.options.hasPanel){this.ne.fireEvent("save",this);(this.copyElm)?this.copyElm.value=this.getContent():this.e.innerHTML=this.getContent()}},getElm:function(){return this.elm},getContent:function(){this.content=this.getElm().innerHTML;this.ne.fireEvent("get",this);return this.content},setContent:function(A){this.content=A;this.ne.fireEvent("set",this);this.elm.innerHTML=this.content},nicCommand:function(B,A){document.execCommand(B,false,A)}});
39
+ var nicEditorIFrameInstance=nicEditorInstance.extend({savedStyles:[],init:function(){var B=this.elm.innerHTML.replace(/^\s+|\s+$/g,"");this.elm.innerHTML="";(!B)?B="<br />":B;this.initialContent=B;this.elmFrame=new bkElement("iframe").setAttributes({src:"javascript:;",frameBorder:0,allowTransparency:"true",scrolling:"no"}).setStyle({height:"100px",width:"100%"}).addClass("frame").appendTo(this.elm);if(this.copyElm){this.elmFrame.setStyle({width:(this.elm.offsetWidth-4)+"px"})}var A=["font-size","font-family","font-weight","color"];for(itm in A){this.savedStyles[bkLib.camelize(itm)]=this.elm.getStyle(itm)}setTimeout(this.initFrame.closure(this),50)},disable:function(){this.elm.innerHTML=this.getContent()},initFrame:function(){var B=$BK(this.elmFrame.contentWindow.document);B.designMode="on";B.open();var A=this.ne.options.externalCSS;B.write("<html><head>"+((A)?'<link href="'+A+'" rel="stylesheet" type="text/css" />':"")+'</head><body id="nicEditContent" style="margin: 0 !important; background-color: transparent !important;">'+this.initialContent+"</body></html>");B.close();this.frameDoc=B;this.frameWin=$BK(this.elmFrame.contentWindow);this.frameContent=$BK(this.frameWin.document.body).setStyle(this.savedStyles);this.instanceDoc=this.frameWin.document.defaultView;this.heightUpdate();this.frameDoc.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keyup",this.heightUpdate.closureListener(this)).addEvent("keydown",this.keyDown.closureListener(this)).addEvent("keyup",this.selected.closure(this));this.ne.fireEvent("add",this)},getElm:function(){return this.frameContent},setContent:function(A){this.content=A;this.ne.fireEvent("set",this);this.frameContent.innerHTML=this.content;this.heightUpdate()},getSel:function(){return(this.frameWin)?this.frameWin.getSelection():this.frameDoc.selection},heightUpdate:function(){this.elmFrame.style.height=Math.max(this.frameContent.offsetHeight,this.initialHeight)+"px"},nicCommand:function(B,A){this.frameDoc.execCommand(B,false,A);setTimeout(this.heightUpdate.closure(this),100)}});
40
+ var nicEditorPanel=bkClass.extend({construct:function(E,B,A){this.elm=E;this.options=B;this.ne=A;this.panelButtons=new Array();this.buttonList=bkExtend([],this.ne.options.buttonList);this.panelContain=new bkElement("DIV").setStyle({overflow:"hidden",width:"100%",border:"1px solid #cccccc",backgroundColor:"#efefef"}).addClass("panelContain");this.panelElm=new bkElement("DIV").setStyle({margin:"2px",marginTop:"0px",zoom:1,overflow:"hidden"}).addClass("panel").appendTo(this.panelContain);this.panelContain.appendTo(E);var C=this.ne.options;var D=C.buttons;for(button in D){this.addButton(button,C,true)}this.reorder();E.noSelect()},addButton:function(buttonName,options,noOrder){var button=options.buttons[buttonName];var type=(button.type)?eval("(typeof("+button.type+') == "undefined") ? null : '+button.type+";"):nicEditorButton;var hasButton=bkLib.inArray(this.buttonList,buttonName);if(type&&(hasButton||this.ne.options.fullPanel)){this.panelButtons.push(new type(this.panelElm,buttonName,options,this.ne));if(!hasButton){this.buttonList.push(buttonName)}}},findButton:function(B){for(var A=0;A<this.panelButtons.length;A++){if(this.panelButtons[A].name==B){return this.panelButtons[A]}}},reorder:function(){var C=this.buttonList;for(var B=0;B<C.length;B++){var A=this.findButton(C[B]);if(A){this.panelElm.appendChild(A.margin)}}},remove:function(){this.elm.remove()}});
41
+ var nicEditorButton=bkClass.extend({construct:function(D,A,C,B){this.options=C.buttons[A];this.name=A;this.ne=B;this.elm=D;this.margin=new bkElement("DIV").setStyle({"float":"left",marginTop:"2px"}).appendTo(D);this.contain=new bkElement("DIV").setStyle({width:"20px",height:"20px"}).addClass("buttonContain").appendTo(this.margin);this.border=new bkElement("DIV").setStyle({backgroundColor:"#efefef",border:"1px solid #efefef"}).appendTo(this.contain);this.button=new bkElement("DIV").setStyle({width:"18px",height:"18px",overflow:"hidden",zoom:1,cursor:"pointer"}).addClass("button").setStyle(this.ne.getIcon(A,C)).appendTo(this.border);this.button.addEvent("mouseover",this.hoverOn.closure(this)).addEvent("mouseout",this.hoverOff.closure(this)).addEvent("mousedown",this.mouseClick.closure(this)).noSelect();if(!window.opera){this.button.onmousedown=this.button.onclick=bkLib.cancelEvent}B.addEvent("selected",this.enable.closure(this)).addEvent("blur",this.disable.closure(this)).addEvent("key",this.key.closure(this));this.disable();this.init()},init:function(){},hide:function(){this.contain.setStyle({display:"none"})},updateState:function(){if(this.isDisabled){this.setBg()}else{if(this.isHover){this.setBg("hover")}else{if(this.isActive){this.setBg("active")}else{this.setBg()}}}},setBg:function(A){switch(A){case"hover":var B={border:"1px solid #666",backgroundColor:"#ddd"};break;case"active":var B={border:"1px solid #666",backgroundColor:"#ccc"};break;default:var B={border:"1px solid #efefef",backgroundColor:"#efefef"}}this.border.setStyle(B).addClass("button-"+A)},checkNodes:function(A){var B=A;do{if(this.options.tags&&bkLib.inArray(this.options.tags,B.nodeName)){this.activate();return true}}while(B=B.parentNode&&B.className!="nicEdit");B=$BK(A);while(B.nodeType==3){B=$BK(B.parentNode)}if(this.options.css){for(itm in this.options.css){if(B.getStyle(itm,this.ne.selectedInstance.instanceDoc)==this.options.css[itm]){this.activate();return true}}}this.deactivate();return false},activate:function(){if(!this.isDisabled){this.isActive=true;this.updateState();this.ne.fireEvent("buttonActivate",this)}},deactivate:function(){this.isActive=false;this.updateState();if(!this.isDisabled){this.ne.fireEvent("buttonDeactivate",this)}},enable:function(A,B){this.isDisabled=false;this.contain.setStyle({opacity:1}).addClass("buttonEnabled");this.updateState();this.checkNodes(B)},disable:function(A,B){this.isDisabled=true;this.contain.setStyle({opacity:0.6}).removeClass("buttonEnabled");this.updateState()},toggleActive:function(){(this.isActive)?this.deactivate():this.activate()},hoverOn:function(){if(!this.isDisabled){this.isHover=true;this.updateState();this.ne.fireEvent("buttonOver",this)}},hoverOff:function(){this.isHover=false;this.updateState();this.ne.fireEvent("buttonOut",this)},mouseClick:function(){if(this.options.command){this.ne.nicCommand(this.options.command,this.options.commandArgs);if(!this.options.noActive){this.toggleActive()}}this.ne.fireEvent("buttonClick",this)},key:function(A,B){if(this.options.key&&B.ctrlKey&&String.fromCharCode(B.keyCode||B.charCode).toLowerCase()==this.options.key){this.mouseClick();if(B.preventDefault){B.preventDefault()}}}});
42
+ var nicPlugin=bkClass.extend({construct:function(B,A){this.options=A;this.ne=B;this.ne.addEvent("panel",this.loadPanel.closure(this));this.init()},loadPanel:function(C){var B=this.options.buttons;for(var A in B){C.addButton(A,this.options)}C.reorder()},init:function(){}});
43
+
44
+
45
+ var nicPaneOptions = { };
46
+
47
+ var nicEditorPane=bkClass.extend({construct:function(D,C,B,A){this.ne=C;this.elm=D;this.pos=D.pos();this.contain=new bkElement("div").setStyle({zIndex:"99999",overflow:"hidden",position:"absolute",left:this.pos[0]+"px",top:this.pos[1]+"px"});this.pane=new bkElement("div").setStyle({fontSize:"12px",border:"1px solid #ccc",overflow:"hidden",padding:"4px",textAlign:"left",backgroundColor:"#ffffc9"}).addClass("pane").setStyle(B).appendTo(this.contain);if(A&&!A.options.noClose){this.close=new bkElement("div").setStyle({"float":"right",height:"16px",width:"16px",cursor:"pointer"}).setStyle(this.ne.getIcon("close",nicPaneOptions)).addEvent("mousedown",A.removePane.closure(this)).appendTo(this.pane)}this.contain.noSelect().appendTo(document.body);this.position();this.init()},init:function(){},position:function(){if(this.ne.nicPanel){var B=this.ne.nicPanel.elm;var A=B.pos();var C=A[0]+parseInt(B.getStyle("width"))-(parseInt(this.pane.getStyle("width"))+8);if(C<this.pos[0]){this.contain.setStyle({left:C+"px"})}}},toggle:function(){this.isVisible=!this.isVisible;this.contain.setStyle({display:((this.isVisible)?"block":"none")})},remove:function(){if(this.contain){this.contain.remove();this.contain=null}},append:function(A){A.appendTo(this.pane)},setContent:function(A){this.pane.setContent(A)}});
48
+
49
+ var nicEditorAdvancedButton=nicEditorButton.extend({init:function(){this.ne.addEvent("selected",this.removePane.closure(this)).addEvent("blur",this.removePane.closure(this))},mouseClick:function(){if(!this.isDisabled){if(this.pane&&this.pane.pane){this.removePane()}else{this.pane=new nicEditorPane(this.contain,this.ne,{width:(this.width||"270px"),backgroundColor:"#fff"},this);this.addPane();this.ne.selectedInstance.saveRng()}}},addForm:function(C,G){this.form=new bkElement("form").addEvent("submit",this.submit.closureListener(this));this.pane.append(this.form);this.inputs={};for(itm in C){var D=C[itm];var F="";if(G){F=G.getAttribute(itm)}if(!F){F=D.value||""}var A=C[itm].type;if(A=="title"){new bkElement("div").setContent(D.txt).setStyle({fontSize:"14px",fontWeight:"bold",padding:"0px",margin:"2px 0"}).appendTo(this.form)}else{var B=new bkElement("div").setStyle({overflow:"hidden",clear:"both"}).appendTo(this.form);if(D.txt){new bkElement("label").setAttributes({"for":itm}).setContent(D.txt).setStyle({margin:"2px 4px",fontSize:"13px",width:"50px",lineHeight:"20px",textAlign:"right","float":"left"}).appendTo(B)}switch(A){case"text":this.inputs[itm]=new bkElement("input").setAttributes({id:itm,value:F,type:"text"}).setStyle({margin:"2px 0",fontSize:"13px","float":"left",height:"20px",border:"1px solid #ccc",overflow:"hidden"}).setStyle(D.style).appendTo(B);break;case"select":this.inputs[itm]=new bkElement("select").setAttributes({id:itm}).setStyle({border:"1px solid #ccc","float":"left",margin:"2px 0"}).appendTo(B);for(opt in D.options){var E=new bkElement("option").setAttributes({value:opt,selected:(opt==F)?"selected":""}).setContent(D.options[opt]).appendTo(this.inputs[itm])}break;case"content":this.inputs[itm]=new bkElement("textarea").setAttributes({id:itm}).setStyle({border:"1px solid #ccc","float":"left"}).setStyle(D.style).appendTo(B);this.inputs[itm].value=F}}}new bkElement("input").setAttributes({type:"submit"}).setStyle({backgroundColor:"#efefef",border:"1px solid #ccc",margin:"3px 0","float":"left",clear:"both"}).appendTo(this.form);this.form.onsubmit=bkLib.cancelEvent},submit:function(){},findElm:function(B,A,E){var D=this.ne.selectedInstance.getElm().getElementsByTagName(B);for(var C=0;C<D.length;C++){if(D[C].getAttribute(A)==E){return $BK(D[C])}}},removePane:function(){if(this.pane){this.pane.remove();this.pane=null;this.ne.selectedInstance.restoreRng()}}});
50
+
51
+ var nicButtonTips=bkClass.extend({construct:function(A){this.ne=A;A.addEvent("buttonOver",this.show.closure(this)).addEvent("buttonOut",this.hide.closure(this))},show:function(A){this.timer=setTimeout(this.create.closure(this,A),400)},create:function(A){this.timer=null;if(!this.pane){this.pane=new nicEditorPane(A.button,this.ne,{fontSize:"12px",marginTop:"5px"});this.pane.setContent(A.options.name)}},hide:function(A){if(this.timer){clearTimeout(this.timer)}if(this.pane){this.pane=this.pane.remove()}}});nicEditors.registerPlugin(nicButtonTips);
52
+
53
+
54
+ var nicSelectOptions = {
55
+ buttons : {
56
+ 'fontSize' : {name : __('Select Font Size'), type : 'nicEditorFontSizeSelect', command : 'fontsize'},
57
+ 'fontFamily' : {name : __('Select Font Family'), type : 'nicEditorFontFamilySelect', command : 'fontname'},
58
+ 'fontFormat' : {name : __('Select Font Format'), type : 'nicEditorFontFormatSelect', command : 'formatBlock'}
59
+ }
60
+ };
61
+
62
+ var nicEditorSelect=bkClass.extend({construct:function(D,A,C,B){this.options=C.buttons[A];this.elm=D;this.ne=B;this.name=A;this.selOptions=new Array();this.margin=new bkElement("div").setStyle({"float":"left",margin:"2px 1px 0 1px"}).appendTo(this.elm);this.contain=new bkElement("div").setStyle({width:"90px",height:"20px",cursor:"pointer",overflow:"hidden"}).addClass("selectContain").addEvent("click",this.toggle.closure(this)).appendTo(this.margin);this.items=new bkElement("div").setStyle({overflow:"hidden",zoom:1,border:"1px solid #ccc",paddingLeft:"3px",backgroundColor:"#fff"}).appendTo(this.contain);this.control=new bkElement("div").setStyle({overflow:"hidden","float":"right",height:"18px",width:"16px"}).addClass("selectControl").setStyle(this.ne.getIcon("arrow",C)).appendTo(this.items);this.txt=new bkElement("div").setStyle({overflow:"hidden","float":"left",width:"66px",height:"14px",marginTop:"1px",fontFamily:"sans-serif",textAlign:"center",fontSize:"12px"}).addClass("selectTxt").appendTo(this.items);if(!window.opera){this.contain.onmousedown=this.control.onmousedown=this.txt.onmousedown=bkLib.cancelEvent}this.margin.noSelect();this.ne.addEvent("selected",this.enable.closure(this)).addEvent("blur",this.disable.closure(this));this.disable();this.init()},disable:function(){this.isDisabled=true;this.close();this.contain.setStyle({opacity:0.6})},enable:function(A){this.isDisabled=false;this.close();this.contain.setStyle({opacity:1})},setDisplay:function(A){this.txt.setContent(A)},toggle:function(){if(!this.isDisabled){(this.pane)?this.close():this.open()}},open:function(){this.pane=new nicEditorPane(this.items,this.ne,{width:"88px",padding:"0px",borderTop:0,borderLeft:"1px solid #ccc",borderRight:"1px solid #ccc",borderBottom:"0px",backgroundColor:"#fff"});for(var C=0;C<this.selOptions.length;C++){var B=this.selOptions[C];var A=new bkElement("div").setStyle({overflow:"hidden",borderBottom:"1px solid #ccc",width:"88px",textAlign:"left",overflow:"hidden",cursor:"pointer"});var D=new bkElement("div").setStyle({padding:"0px 4px"}).setContent(B[1]).appendTo(A).noSelect();D.addEvent("click",this.update.closure(this,B[0])).addEvent("mouseover",this.over.closure(this,D)).addEvent("mouseout",this.out.closure(this,D)).setAttributes("id",B[0]);this.pane.append(A);if(!window.opera){D.onmousedown=bkLib.cancelEvent}}},close:function(){if(this.pane){this.pane=this.pane.remove()}},over:function(A){A.setStyle({backgroundColor:"#ccc"})},out:function(A){A.setStyle({backgroundColor:"#fff"})},add:function(B,A){this.selOptions.push(new Array(B,A))},update:function(A){this.ne.nicCommand(this.options.command,A);this.close()}});var nicEditorFontSizeSelect=nicEditorSelect.extend({sel:{1:"1&nbsp;(8pt)",2:"2&nbsp;(10pt)",3:"3&nbsp;(12pt)",4:"4&nbsp;(14pt)",5:"5&nbsp;(18pt)",6:"6&nbsp;(24pt)"},init:function(){this.setDisplay("Font&nbsp;Size...");for(itm in this.sel){this.add(itm,'<font size="'+itm+'">'+this.sel[itm]+"</font>")}}});var nicEditorFontFamilySelect=nicEditorSelect.extend({sel:{arial:"Arial","comic sans ms":"Comic Sans","courier new":"Courier New",georgia:"Georgia",helvetica:"Helvetica",impact:"Impact","times new roman":"Times","trebuchet ms":"Trebuchet",verdana:"Verdana"},init:function(){this.setDisplay("Font&nbsp;Family...");for(itm in this.sel){this.add(itm,'<font face="'+itm+'">'+this.sel[itm]+"</font>")}}});var nicEditorFontFormatSelect=nicEditorSelect.extend({sel:{p:"Paragraph",pre:"Pre",h6:"Heading&nbsp;6",h5:"Heading&nbsp;5",h4:"Heading&nbsp;4",h3:"Heading&nbsp;3",h2:"Heading&nbsp;2",h1:"Heading&nbsp;1"},init:function(){this.setDisplay("Font&nbsp;Format...");for(itm in this.sel){var A=itm.toUpperCase();this.add("<"+A+">","<"+itm+' style="padding: 0px; margin: 0px;">'+this.sel[itm]+"</"+A+">")}}});nicEditors.registerPlugin(nicPlugin,nicSelectOptions);
63
+
64
+
65
+ var nicLinkOptions = {
66
+ buttons : {
67
+ 'link' : {name : 'Add Link', type : 'nicLinkButton', tags : ['A']},
68
+ 'unlink' : {name : 'Remove Link', command : 'unlink', noActive : true}
69
+ }
70
+ };
71
+
72
+ var nicLinkButton=nicEditorAdvancedButton.extend({addPane:function(){this.ln=this.ne.selectedInstance.selElm().parentTag("A");this.addForm({"":{type:"title",txt:"Add/Edit Link"},href:{type:"text",txt:"URL",value:"http://",style:{width:"150px"}},title:{type:"text",txt:"Title"},target:{type:"select",txt:"Open In",options:{"":"Current Window",_blank:"New Window"},style:{width:"100px"}}},this.ln)},submit:function(C){var A=this.inputs.href.value;if(A=="http://"||A==""){alert("You must enter a URL to Create a Link");return false}this.removePane();if(!this.ln){var B="javascript:nicTemp();";this.ne.nicCommand("createlink",B);this.ln=this.findElm("A","href",B)}if(this.ln){this.ln.setAttributes({href:this.inputs.href.value,title:this.inputs.title.value,target:this.inputs.target.options[this.inputs.target.selectedIndex].value})}}});nicEditors.registerPlugin(nicPlugin,nicLinkOptions);
73
+
74
+
75
+ var nicColorOptions = {
76
+ buttons : {
77
+ 'forecolor' : {name : __('Change Text Color'), type : 'nicEditorColorButton', noClose : true},
78
+ 'bgcolor' : {name : __('Change Background Color'), type : 'nicEditorBgColorButton', noClose : true}
79
+ }
80
+ };
81
+
82
+ var nicEditorColorButton=nicEditorAdvancedButton.extend({addPane:function(){var D={0:"00",1:"33",2:"66",3:"99",4:"CC",5:"FF"};var H=new bkElement("DIV").setStyle({width:"270px"});for(var A in D){for(var F in D){for(var E in D){var I="#"+D[A]+D[E]+D[F];var C=new bkElement("DIV").setStyle({cursor:"pointer",height:"15px","float":"left"}).appendTo(H);var G=new bkElement("DIV").setStyle({border:"2px solid "+I}).appendTo(C);var B=new bkElement("DIV").setStyle({backgroundColor:I,overflow:"hidden",width:"11px",height:"11px"}).addEvent("click",this.colorSelect.closure(this,I)).addEvent("mouseover",this.on.closure(this,G)).addEvent("mouseout",this.off.closure(this,G,I)).appendTo(G);if(!window.opera){C.onmousedown=B.onmousedown=bkLib.cancelEvent}}}}this.pane.append(H.noSelect())},colorSelect:function(A){this.ne.nicCommand("foreColor",A);this.removePane()},on:function(A){A.setStyle({border:"2px solid #000"})},off:function(A,B){A.setStyle({border:"2px solid "+B})}});var nicEditorBgColorButton=nicEditorColorButton.extend({colorSelect:function(A){this.ne.nicCommand("hiliteColor",A);this.removePane()}});nicEditors.registerPlugin(nicPlugin,nicColorOptions);
83
+
84
+
85
+ var nicImageOptions = {
86
+ buttons : {
87
+ 'image' : {name : 'Add Image', type : 'nicImageButton', tags : ['IMG']}
88
+ }
89
+
90
+ };
91
+
92
+ var nicImageButton=nicEditorAdvancedButton.extend({addPane:function(){this.im=this.ne.selectedInstance.selElm().parentTag("IMG");this.addForm({"":{type:"title",txt:"Add/Edit Image"},src:{type:"text",txt:"URL",value:"http://",style:{width:"150px"}},alt:{type:"text",txt:"Alt Text",style:{width:"100px"}},align:{type:"select",txt:"Align",options:{none:"Default",left:"Left",right:"Right"}}},this.im)},submit:function(B){var C=this.inputs.src.value;if(C==""||C=="http://"){alert("You must enter a Image URL to insert");return false}this.removePane();if(!this.im){var A="javascript:nicImTemp();";this.ne.nicCommand("insertImage",A);this.im=this.findElm("IMG","src",A)}if(this.im){this.im.setAttributes({src:this.inputs.src.value,alt:this.inputs.alt.value,align:this.inputs.align.value})}}});nicEditors.registerPlugin(nicPlugin,nicImageOptions);
93
+
94
+
95
+ var nicSaveOptions = {
96
+ buttons : {
97
+ 'save' : {name : __('Save this content'), type : 'nicEditorSaveButton'}
98
+ }
99
+ };
100
+
101
+ var nicEditorSaveButton=nicEditorButton.extend({init:function(){if(!this.ne.options.onSave){this.margin.setStyle({display:"none"})}},mouseClick:function(){var B=this.ne.options.onSave;var A=this.ne.selectedInstance;B(A.getContent(),A.elm.id,A)}});nicEditors.registerPlugin(nicPlugin,nicSaveOptions);
102
+