diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
index de5d954..b09db87
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,8 @@
-.bundle/
-log/*.log
-pkg/
-test/dummy/db/*.sqlite3
-test/dummy/db/*.sqlite3-journal
-test/dummy/log/*.log
-test/dummy/tmp/
-test/dummy/.sass-cache
+.bundle/
+log/*.log
+pkg/
+test/dummy/db/*.sqlite3
+test/dummy/db/*.sqlite3-journal
+test/dummy/log/*.log
+test/dummy/tmp/
+test/dummy/.sass-cache
diff --git a/Gemfile b/Gemfile
old mode 100644
new mode 100755
index a98e254..85319f2
--- a/Gemfile
+++ b/Gemfile
@@ -1,14 +1,14 @@
-source "https://rubygems.org"
-
-# Declare your gem's dependencies in universal_table.gemspec.
-# Bundler will treat runtime dependencies like base dependencies, and
-# development dependencies will be added by default to the :development group.
-gemspec
-
-# Declare any dependencies that are still in development here instead of in
-# your gemspec. These might include edge Rails or gems from your path or
-# Git. Remember to move these dependencies to your gemspec before releasing
-# your gem to rubygems.org.
-
-# To use debugger
-# gem 'debugger'
+source "https://rubygems.org"
+
+# Declare your gem's dependencies in universal_table.gemspec.
+# Bundler will treat runtime dependencies like base dependencies, and
+# development dependencies will be added by default to the :development group.
+gemspec
+
+# Declare any dependencies that are still in development here instead of in
+# your gemspec. These might include edge Rails or gems from your path or
+# Git. Remember to move these dependencies to your gemspec before releasing
+# your gem to rubygems.org.
+
+# To use debugger
+# gem 'debugger'
diff --git a/MIT-LICENSE b/MIT-LICENSE
old mode 100644
new mode 100755
index 1e4beb8..ce19b8a
--- a/MIT-LICENSE
+++ b/MIT-LICENSE
@@ -1,20 +1,20 @@
-Copyright 2015 YOURNAME
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+Copyright 2015 YOURNAME
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.rdoc b/README.rdoc
old mode 100644
new mode 100755
index 690ede5..ebfafdb
--- a/README.rdoc
+++ b/README.rdoc
@@ -1,3 +1,3 @@
-= UniversalTable
-
+= UniversalTable
+
This project rocks and uses MIT-LICENSE.
\ No newline at end of file
diff --git a/Rakefile b/Rakefile
old mode 100644
new mode 100755
index e76c625..58babef
--- a/Rakefile
+++ b/Rakefile
@@ -1,34 +1,34 @@
-begin
- require 'bundler/setup'
-rescue LoadError
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
-end
-
-require 'rdoc/task'
-
-RDoc::Task.new(:rdoc) do |rdoc|
- rdoc.rdoc_dir = 'rdoc'
- rdoc.title = 'UniversalTable'
- rdoc.options << '--line-numbers'
- rdoc.rdoc_files.include('README.rdoc')
- rdoc.rdoc_files.include('lib/**/*.rb')
-end
-
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
-load 'rails/tasks/engine.rake'
-
-
-
-Bundler::GemHelper.install_tasks
-
-require 'rake/testtask'
-
-Rake::TestTask.new(:test) do |t|
- t.libs << 'lib'
- t.libs << 'test'
- t.pattern = 'test/**/*_test.rb'
- t.verbose = false
-end
-
-
-task default: :test
+begin
+ require 'bundler/setup'
+rescue LoadError
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
+end
+
+require 'rdoc/task'
+
+RDoc::Task.new(:rdoc) do |rdoc|
+ rdoc.rdoc_dir = 'rdoc'
+ rdoc.title = 'UniversalTable'
+ rdoc.options << '--line-numbers'
+ rdoc.rdoc_files.include('README.rdoc')
+ rdoc.rdoc_files.include('lib/**/*.rb')
+end
+
+APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+load 'rails/tasks/engine.rake'
+
+
+
+Bundler::GemHelper.install_tasks
+
+require 'rake/testtask'
+
+Rake::TestTask.new(:test) do |t|
+ t.libs << 'lib'
+ t.libs << 'test'
+ t.pattern = 'test/**/*_test.rb'
+ t.verbose = false
+end
+
+
+task default: :test
diff --git a/app/assets/images/universal_table/.keep b/app/assets/images/universal_table/.keep
old mode 100644
new mode 100755
diff --git a/app/assets/javascripts/mind_map/jsmind/jsmind.common.js b/app/assets/javascripts/mind_map/jsmind/jsmind.common.js
old mode 100644
new mode 100755
index 0a13da6..43d3fad
--- a/app/assets/javascripts/mind_map/jsmind/jsmind.common.js
+++ b/app/assets/javascripts/mind_map/jsmind/jsmind.common.js
@@ -1,78 +1,78 @@
-export const __version__ = '1.0.0'
-export const __author__ = 'author'
-
-if (typeof String.prototype.startsWith != 'function') {
- String.prototype.startsWith = function (p) {
- return this.slice(0, p.length) === p
- }
-}
-
-export const Direction = {
- left: -1,
- center: 0,
- right: 1,
- of: function (dir) {
- if (!dir || dir === -1 || dir === 0 || dir === 1) {
- return dir
- }
- if (dir === '-1' || dir === '0' || dir === '1') {
- return parseInt(dir)
- }
- if (dir.toLowerCase() === 'left') {
- return this.left
- }
- if (dir.toLowerCase() === 'right') {
- return this.right
- }
- if (dir.toLowerCase() === 'center') {
- return this.center
- }
- },
-}
-export const EventType = { show: 1, resize: 2, edit: 3, select: 4 }
-export const Key = { meta: 1 << 13, ctrl: 1 << 12, alt: 1 << 11, shift: 1 << 10 }
-export const LogLevel = { debug: 1, info: 2, warn: 3, error: 4, disable: 9 }
-
-// an noop function define
-var _noop = function () {}
-export let logger =
- typeof console === 'undefined'
- ? {
- level: _noop,
- log: _noop,
- debug: _noop,
- info: _noop,
- warn: _noop,
- error: _noop,
- }
- : {
- level: setup_logger_level,
- log: console.log,
- debug: console.debug,
- info: console.info,
- warn: console.warn,
- error: console.error,
- }
-
-function setup_logger_level(log_level) {
- if (log_level > LogLevel.debug) {
- logger.debug = _noop
- } else {
- logger.debug = console.debug
- }
- if (log_level > LogLevel.info) {
- logger.info = _noop
- } else {
- logger.info = console.info
- }
- if (log_level > LogLevel.warn) {
- logger.warn = _noop
- } else {
- logger.warn = console.warn
- }
- if (log_level > LogLevel.error) {
- logger.error = _noop
- } else {
- logger.error = console.error
- }
-}
+export const __version__ = '1.0.0'
+export const __author__ = 'author'
+
+if (typeof String.prototype.startsWith != 'function') {
+ String.prototype.startsWith = function (p) {
+ return this.slice(0, p.length) === p
+ }
+}
+
+export const Direction = {
+ left: -1,
+ center: 0,
+ right: 1,
+ of: function (dir) {
+ if (!dir || dir === -1 || dir === 0 || dir === 1) {
+ return dir
+ }
+ if (dir === '-1' || dir === '0' || dir === '1') {
+ return parseInt(dir)
+ }
+ if (dir.toLowerCase() === 'left') {
+ return this.left
+ }
+ if (dir.toLowerCase() === 'right') {
+ return this.right
+ }
+ if (dir.toLowerCase() === 'center') {
+ return this.center
+ }
+ },
+}
+export const EventType = { show: 1, resize: 2, edit: 3, select: 4 }
+export const Key = { meta: 1 << 13, ctrl: 1 << 12, alt: 1 << 11, shift: 1 << 10 }
+export const LogLevel = { debug: 1, info: 2, warn: 3, error: 4, disable: 9 }
+
+// an noop function define
+var _noop = function () {}
+export let logger =
+ typeof console === 'undefined'
+ ? {
+ level: _noop,
+ log: _noop,
+ debug: _noop,
+ info: _noop,
+ warn: _noop,
+ error: _noop,
+ }
+ : {
+ level: setup_logger_level,
+ log: console.log,
+ debug: console.debug,
+ info: console.info,
+ warn: console.warn,
+ error: console.error,
+ }
+
+function setup_logger_level(log_level) {
+ if (log_level > LogLevel.debug) {
+ logger.debug = _noop
+ } else {
+ logger.debug = console.debug
+ }
+ if (log_level > LogLevel.info) {
+ logger.info = _noop
+ } else {
+ logger.info = console.info
+ }
+ if (log_level > LogLevel.warn) {
+ logger.warn = _noop
+ } else {
+ logger.warn = console.warn
+ }
+ if (log_level > LogLevel.error) {
+ logger.error = _noop
+ } else {
+ logger.error = console.error
+ }
+}
diff --git a/app/assets/javascripts/mind_map/jsmind/jsmind.css b/app/assets/javascripts/mind_map/jsmind/jsmind.css
old mode 100644
new mode 100755
index 427fedf..204880a
--- a/app/assets/javascripts/mind_map/jsmind/jsmind.css
+++ b/app/assets/javascripts/mind_map/jsmind/jsmind.css
@@ -1,400 +1,400 @@
-/* important section */
-.jsmind-inner {
- position: relative;
- overflow: auto;
- width: 100%;
- height: 100%;
- outline: none;
-} /*box-shadow:0 0 2px #000;*/
-.jsmind-inner {
- moz-user-select: -moz-none;
- -moz-user-select: none;
- -o-user-select: none;
- -khtml-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.jsmind-inner canvas {
- position: absolute;
-}
-
-/* z-index:1 */
-svg.jsmind {
- position: absolute;
- z-index: 1;
-}
-canvas.jsmind {
- position: absolute;
- z-index: 1;
-}
-
-/* z-index:2 */
-jmnodes {
- position: absolute;
- z-index: 2;
- background-color: rgba(0, 0, 0, 0);
-} /*background color is necessary*/
-jmnode {
- position: absolute;
- cursor: default;
- max-width: 400px;
-}
-jmexpander {
- position: absolute;
- width: 11px;
- height: 11px;
- display: block;
- overflow: hidden;
- line-height: 12px;
- font-size: 10px;
- text-align: center;
- border-radius: 6px;
- border-width: 1px;
- border-style: solid;
- cursor: pointer;
-}
-
-.jmnode-overflow-wrap jmnodes {
- min-width: 420px;
-}
-
-.jmnode-overflow-hidden jmnode {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-/* default theme */
-jmnode {
- padding: 10px;
- background-color: #fff;
- color: #333;
- border-radius: 5px;
- box-shadow: 1px 1px 1px #666;
- font: 16px/1.125 Verdana, Arial, Helvetica, sans-serif;
-}
-jmnode:hover {
- box-shadow: 2px 2px 8px #000;
- background-color: #ebebeb;
- color: #333;
-}
-jmnode.selected {
- background-color: #11f;
- color: #fff;
- box-shadow: 2px 2px 8px #000;
-}
-jmnode.root {
- font-size: 24px;
-}
-jmexpander {
- border-color: gray;
-}
-jmexpander:hover {
- border-color: #000;
-}
-
-@media screen and (max-device-width: 1024px) {
- jmnode {
- padding: 5px;
- border-radius: 3px;
- font-size: 14px;
- }
- jmnode.root {
- font-size: 21px;
- }
-}
-/* primary theme */
-jmnodes.theme-primary jmnode {
- background-color: #428bca;
- color: #fff;
- border-color: #357ebd;
-}
-jmnodes.theme-primary jmnode:hover {
- background-color: #3276b1;
- border-color: #285e8e;
-}
-jmnodes.theme-primary jmnode.selected {
- background-color: #f1c40f;
- color: #fff;
-}
-jmnodes.theme-primary jmnode.root {
-}
-jmnodes.theme-primary jmexpander {
-}
-jmnodes.theme-primary jmexpander:hover {
-}
-
-/* warning theme */
-jmnodes.theme-warning jmnode {
- background-color: #f0ad4e;
- border-color: #eea236;
- color: #fff;
-}
-jmnodes.theme-warning jmnode:hover {
- background-color: #ed9c28;
- border-color: #d58512;
-}
-jmnodes.theme-warning jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-warning jmnode.root {
-}
-jmnodes.theme-warning jmexpander {
-}
-jmnodes.theme-warning jmexpander:hover {
-}
-
-/* danger theme */
-jmnodes.theme-danger jmnode {
- background-color: #d9534f;
- border-color: #d43f3a;
- color: #fff;
-}
-jmnodes.theme-danger jmnode:hover {
- background-color: #d2322d;
- border-color: #ac2925;
-}
-jmnodes.theme-danger jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-danger jmnode.root {
-}
-jmnodes.theme-danger jmexpander {
-}
-jmnodes.theme-danger jmexpander:hover {
-}
-
-/* success theme */
-jmnodes.theme-success jmnode {
- background-color: #5cb85c;
- border-color: #4cae4c;
- color: #fff;
-}
-jmnodes.theme-success jmnode:hover {
- background-color: #47a447;
- border-color: #398439;
-}
-jmnodes.theme-success jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-success jmnode.root {
-}
-jmnodes.theme-success jmexpander {
-}
-jmnodes.theme-success jmexpander:hover {
-}
-
-/* info theme */
-jmnodes.theme-info jmnode {
- background-color: #5dc0de;
- border-color: #46b8da;
- color: #fff;
-}
-jmnodes.theme-info jmnode:hover {
- background-color: #39b3d7;
- border-color: #269abc;
-}
-jmnodes.theme-info jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-info jmnode.root {
-}
-jmnodes.theme-info jmexpander {
-}
-jmnodes.theme-info jmexpander:hover {
-}
-
-/* greensea theme */
-jmnodes.theme-greensea jmnode {
- background-color: #1abc9c;
- color: #fff;
-}
-jmnodes.theme-greensea jmnode:hover {
- background-color: #16a085;
-}
-jmnodes.theme-greensea jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-greensea jmnode.root {
-}
-jmnodes.theme-greensea jmexpander {
-}
-jmnodes.theme-greensea jmexpander:hover {
-}
-
-/* nephrite theme */
-jmnodes.theme-nephrite jmnode {
- background-color: #2ecc71;
- color: #fff;
-}
-jmnodes.theme-nephrite jmnode:hover {
- background-color: #27ae60;
-}
-jmnodes.theme-nephrite jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-nephrite jmnode.root {
-}
-jmnodes.theme-nephrite jmexpander {
-}
-jmnodes.theme-nephrite jmexpander:hover {
-}
-
-/* belizehole theme */
-jmnodes.theme-belizehole jmnode {
- background-color: #3498db;
- color: #fff;
-}
-jmnodes.theme-belizehole jmnode:hover {
- background-color: #2980b9;
-}
-jmnodes.theme-belizehole jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-belizehole jmnode.root {
-}
-jmnodes.theme-belizehole jmexpander {
-}
-jmnodes.theme-belizehole jmexpander:hover {
-}
-
-/* wisteria theme */
-jmnodes.theme-wisteria jmnode {
- background-color: #9b59b6;
- color: #fff;
-}
-jmnodes.theme-wisteria jmnode:hover {
- background-color: #8e44ad;
-}
-jmnodes.theme-wisteria jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-wisteria jmnode.root {
-}
-jmnodes.theme-wisteria jmexpander {
-}
-jmnodes.theme-wisteria jmexpander:hover {
-}
-
-/* asphalt theme */
-jmnodes.theme-asphalt jmnode {
- background-color: #34495e;
- color: #fff;
-}
-jmnodes.theme-asphalt jmnode:hover {
- background-color: #2c3e50;
-}
-jmnodes.theme-asphalt jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-asphalt jmnode.root {
-}
-jmnodes.theme-asphalt jmexpander {
-}
-jmnodes.theme-asphalt jmexpander:hover {
-}
-
-/* orange theme */
-jmnodes.theme-orange jmnode {
- background-color: #f1c40f;
- color: #fff;
-}
-jmnodes.theme-orange jmnode:hover {
- background-color: #f39c12;
-}
-jmnodes.theme-orange jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-orange jmnode.root {
-}
-jmnodes.theme-orange jmexpander {
-}
-jmnodes.theme-orange jmexpander:hover {
-}
-
-/* pumpkin theme */
-jmnodes.theme-pumpkin jmnode {
- background-color: #e67e22;
- color: #fff;
-}
-jmnodes.theme-pumpkin jmnode:hover {
- background-color: #d35400;
-}
-jmnodes.theme-pumpkin jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-pumpkin jmnode.root {
-}
-jmnodes.theme-pumpkin jmexpander {
-}
-jmnodes.theme-pumpkin jmexpander:hover {
-}
-
-/* pomegranate theme */
-jmnodes.theme-pomegranate jmnode {
- background-color: #e74c3c;
- color: #fff;
-}
-jmnodes.theme-pomegranate jmnode:hover {
- background-color: #c0392b;
-}
-jmnodes.theme-pomegranate jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-pomegranate jmnode.root {
-}
-jmnodes.theme-pomegranate jmexpander {
-}
-jmnodes.theme-pomegranate jmexpander:hover {
-}
-
-/* clouds theme */
-jmnodes.theme-clouds jmnode {
- background-color: #ecf0f1;
- color: #333;
-}
-jmnodes.theme-clouds jmnode:hover {
- background-color: #bdc3c7;
-}
-jmnodes.theme-clouds jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-clouds jmnode.root {
-}
-jmnodes.theme-clouds jmexpander {
-}
-jmnodes.theme-clouds jmexpander:hover {
-}
-
-/* asbestos theme */
-jmnodes.theme-asbestos jmnode {
- background-color: #95a5a6;
- color: #fff;
-}
-jmnodes.theme-asbestos jmnode:hover {
- background-color: #7f8c8d;
-}
-jmnodes.theme-asbestos jmnode.selected {
- background-color: #11f;
- color: #fff;
-}
-jmnodes.theme-asbestos jmnode.root {
-}
-jmnodes.theme-asbestos jmexpander {
-}
-jmnodes.theme-asbestos jmexpander:hover {
-}
+/* important section */
+.jsmind-inner {
+ position: relative;
+ overflow: auto;
+ width: 100%;
+ height: 100%;
+ outline: none;
+} /*box-shadow:0 0 2px #000;*/
+.jsmind-inner {
+ moz-user-select: -moz-none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.jsmind-inner canvas {
+ position: absolute;
+}
+
+/* z-index:1 */
+svg.jsmind {
+ position: absolute;
+ z-index: 1;
+}
+canvas.jsmind {
+ position: absolute;
+ z-index: 1;
+}
+
+/* z-index:2 */
+jmnodes {
+ position: absolute;
+ z-index: 2;
+ background-color: rgba(0, 0, 0, 0);
+} /*background color is necessary*/
+jmnode {
+ position: absolute;
+ cursor: default;
+ max-width: 400px;
+}
+jmexpander {
+ position: absolute;
+ width: 11px;
+ height: 11px;
+ display: block;
+ overflow: hidden;
+ line-height: 12px;
+ font-size: 10px;
+ text-align: center;
+ border-radius: 6px;
+ border-width: 1px;
+ border-style: solid;
+ cursor: pointer;
+}
+
+.jmnode-overflow-wrap jmnodes {
+ min-width: 420px;
+}
+
+.jmnode-overflow-hidden jmnode {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+/* default theme */
+jmnode {
+ padding: 10px;
+ background-color: #fff;
+ color: #333;
+ border-radius: 5px;
+ box-shadow: 1px 1px 1px #666;
+ font: 16px/1.125 Verdana, Arial, Helvetica, sans-serif;
+}
+jmnode:hover {
+ box-shadow: 2px 2px 8px #000;
+ background-color: #ebebeb;
+ color: #333;
+}
+jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+ box-shadow: 2px 2px 8px #000;
+}
+jmnode.root {
+ font-size: 24px;
+}
+jmexpander {
+ border-color: gray;
+}
+jmexpander:hover {
+ border-color: #000;
+}
+
+@media screen and (max-device-width: 1024px) {
+ jmnode {
+ padding: 5px;
+ border-radius: 3px;
+ font-size: 14px;
+ }
+ jmnode.root {
+ font-size: 21px;
+ }
+}
+/* primary theme */
+jmnodes.theme-primary jmnode {
+ background-color: #428bca;
+ color: #fff;
+ border-color: #357ebd;
+}
+jmnodes.theme-primary jmnode:hover {
+ background-color: #3276b1;
+ border-color: #285e8e;
+}
+jmnodes.theme-primary jmnode.selected {
+ background-color: #f1c40f;
+ color: #fff;
+}
+jmnodes.theme-primary jmnode.root {
+}
+jmnodes.theme-primary jmexpander {
+}
+jmnodes.theme-primary jmexpander:hover {
+}
+
+/* warning theme */
+jmnodes.theme-warning jmnode {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+ color: #fff;
+}
+jmnodes.theme-warning jmnode:hover {
+ background-color: #ed9c28;
+ border-color: #d58512;
+}
+jmnodes.theme-warning jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-warning jmnode.root {
+}
+jmnodes.theme-warning jmexpander {
+}
+jmnodes.theme-warning jmexpander:hover {
+}
+
+/* danger theme */
+jmnodes.theme-danger jmnode {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+ color: #fff;
+}
+jmnodes.theme-danger jmnode:hover {
+ background-color: #d2322d;
+ border-color: #ac2925;
+}
+jmnodes.theme-danger jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-danger jmnode.root {
+}
+jmnodes.theme-danger jmexpander {
+}
+jmnodes.theme-danger jmexpander:hover {
+}
+
+/* success theme */
+jmnodes.theme-success jmnode {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+ color: #fff;
+}
+jmnodes.theme-success jmnode:hover {
+ background-color: #47a447;
+ border-color: #398439;
+}
+jmnodes.theme-success jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-success jmnode.root {
+}
+jmnodes.theme-success jmexpander {
+}
+jmnodes.theme-success jmexpander:hover {
+}
+
+/* info theme */
+jmnodes.theme-info jmnode {
+ background-color: #5dc0de;
+ border-color: #46b8da;
+ color: #fff;
+}
+jmnodes.theme-info jmnode:hover {
+ background-color: #39b3d7;
+ border-color: #269abc;
+}
+jmnodes.theme-info jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-info jmnode.root {
+}
+jmnodes.theme-info jmexpander {
+}
+jmnodes.theme-info jmexpander:hover {
+}
+
+/* greensea theme */
+jmnodes.theme-greensea jmnode {
+ background-color: #1abc9c;
+ color: #fff;
+}
+jmnodes.theme-greensea jmnode:hover {
+ background-color: #16a085;
+}
+jmnodes.theme-greensea jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-greensea jmnode.root {
+}
+jmnodes.theme-greensea jmexpander {
+}
+jmnodes.theme-greensea jmexpander:hover {
+}
+
+/* nephrite theme */
+jmnodes.theme-nephrite jmnode {
+ background-color: #2ecc71;
+ color: #fff;
+}
+jmnodes.theme-nephrite jmnode:hover {
+ background-color: #27ae60;
+}
+jmnodes.theme-nephrite jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-nephrite jmnode.root {
+}
+jmnodes.theme-nephrite jmexpander {
+}
+jmnodes.theme-nephrite jmexpander:hover {
+}
+
+/* belizehole theme */
+jmnodes.theme-belizehole jmnode {
+ background-color: #3498db;
+ color: #fff;
+}
+jmnodes.theme-belizehole jmnode:hover {
+ background-color: #2980b9;
+}
+jmnodes.theme-belizehole jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-belizehole jmnode.root {
+}
+jmnodes.theme-belizehole jmexpander {
+}
+jmnodes.theme-belizehole jmexpander:hover {
+}
+
+/* wisteria theme */
+jmnodes.theme-wisteria jmnode {
+ background-color: #9b59b6;
+ color: #fff;
+}
+jmnodes.theme-wisteria jmnode:hover {
+ background-color: #8e44ad;
+}
+jmnodes.theme-wisteria jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-wisteria jmnode.root {
+}
+jmnodes.theme-wisteria jmexpander {
+}
+jmnodes.theme-wisteria jmexpander:hover {
+}
+
+/* asphalt theme */
+jmnodes.theme-asphalt jmnode {
+ background-color: #34495e;
+ color: #fff;
+}
+jmnodes.theme-asphalt jmnode:hover {
+ background-color: #2c3e50;
+}
+jmnodes.theme-asphalt jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-asphalt jmnode.root {
+}
+jmnodes.theme-asphalt jmexpander {
+}
+jmnodes.theme-asphalt jmexpander:hover {
+}
+
+/* orange theme */
+jmnodes.theme-orange jmnode {
+ background-color: #f1c40f;
+ color: #fff;
+}
+jmnodes.theme-orange jmnode:hover {
+ background-color: #f39c12;
+}
+jmnodes.theme-orange jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-orange jmnode.root {
+}
+jmnodes.theme-orange jmexpander {
+}
+jmnodes.theme-orange jmexpander:hover {
+}
+
+/* pumpkin theme */
+jmnodes.theme-pumpkin jmnode {
+ background-color: #e67e22;
+ color: #fff;
+}
+jmnodes.theme-pumpkin jmnode:hover {
+ background-color: #d35400;
+}
+jmnodes.theme-pumpkin jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-pumpkin jmnode.root {
+}
+jmnodes.theme-pumpkin jmexpander {
+}
+jmnodes.theme-pumpkin jmexpander:hover {
+}
+
+/* pomegranate theme */
+jmnodes.theme-pomegranate jmnode {
+ background-color: #e74c3c;
+ color: #fff;
+}
+jmnodes.theme-pomegranate jmnode:hover {
+ background-color: #c0392b;
+}
+jmnodes.theme-pomegranate jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-pomegranate jmnode.root {
+}
+jmnodes.theme-pomegranate jmexpander {
+}
+jmnodes.theme-pomegranate jmexpander:hover {
+}
+
+/* clouds theme */
+jmnodes.theme-clouds jmnode {
+ background-color: #ecf0f1;
+ color: #333;
+}
+jmnodes.theme-clouds jmnode:hover {
+ background-color: #bdc3c7;
+}
+jmnodes.theme-clouds jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-clouds jmnode.root {
+}
+jmnodes.theme-clouds jmexpander {
+}
+jmnodes.theme-clouds jmexpander:hover {
+}
+
+/* asbestos theme */
+jmnodes.theme-asbestos jmnode {
+ background-color: #95a5a6;
+ color: #fff;
+}
+jmnodes.theme-asbestos jmnode:hover {
+ background-color: #7f8c8d;
+}
+jmnodes.theme-asbestos jmnode.selected {
+ background-color: #11f;
+ color: #fff;
+}
+jmnodes.theme-asbestos jmnode.root {
+}
+jmnodes.theme-asbestos jmexpander {
+}
+jmnodes.theme-asbestos jmexpander:hover {
+}
diff --git a/app/assets/javascripts/mind_map/jsmind/jsmind.data_provider.js b/app/assets/javascripts/mind_map/jsmind/jsmind.data_provider.js
old mode 100644
new mode 100755
index ae9da1b..16e80a3
--- a/app/assets/javascripts/mind_map/jsmind/jsmind.data_provider.js
+++ b/app/assets/javascripts/mind_map/jsmind/jsmind.data_provider.js
@@ -1,56 +1,56 @@
-import { logger } from './jsmind.common.js'
-import { format } from './jsmind.format.js'
-
-export class DataProvider {
- constructor(jm) {
- this.jm = jm
- }
-
- init() {
- logger.debug('data.init')
- }
- reset() {
- logger.debug('data.reset')
- }
- load(mind_data) {
- var df = null
- var mind = null
- if (typeof mind_data === 'object') {
- if (!!mind_data.format) {
- df = mind_data.format
- } else {
- df = 'node_tree'
- }
- } else {
- df = 'freemind'
- }
-
- if (df == 'node_array') {
- mind = format.node_array.get_mind(mind_data)
- } else if (df == 'node_tree') {
- mind = format.node_tree.get_mind(mind_data)
- } else if (df == 'freemind') {
- mind = format.freemind.get_mind(mind_data)
- } else if (df == 'text') {
- mind = format.text.get_mind(mind_data)
- } else {
- logger.warn('unsupported format')
- }
- return mind
- }
- get_data(data_format) {
- var data = null
- if (data_format == 'node_array') {
- data = format.node_array.get_data(this.jm.mind)
- } else if (data_format == 'node_tree') {
- data = format.node_tree.get_data(this.jm.mind)
- } else if (data_format == 'freemind') {
- data = format.freemind.get_data(this.jm.mind)
- } else if (data_format == 'text') {
- data = format.text.get_data(this.jm.mind)
- } else {
- logger.error('unsupported ' + data_format + ' format')
- }
- return data
- }
-}
+import { logger } from './jsmind.common.js'
+import { format } from './jsmind.format.js'
+
+export class DataProvider {
+ constructor(jm) {
+ this.jm = jm
+ }
+
+ init() {
+ logger.debug('data.init')
+ }
+ reset() {
+ logger.debug('data.reset')
+ }
+ load(mind_data) {
+ var df = null
+ var mind = null
+ if (typeof mind_data === 'object') {
+ if (!!mind_data.format) {
+ df = mind_data.format
+ } else {
+ df = 'node_tree'
+ }
+ } else {
+ df = 'freemind'
+ }
+
+ if (df == 'node_array') {
+ mind = format.node_array.get_mind(mind_data)
+ } else if (df == 'node_tree') {
+ mind = format.node_tree.get_mind(mind_data)
+ } else if (df == 'freemind') {
+ mind = format.freemind.get_mind(mind_data)
+ } else if (df == 'text') {
+ mind = format.text.get_mind(mind_data)
+ } else {
+ logger.warn('unsupported format')
+ }
+ return mind
+ }
+ get_data(data_format) {
+ var data = null
+ if (data_format == 'node_array') {
+ data = format.node_array.get_data(this.jm.mind)
+ } else if (data_format == 'node_tree') {
+ data = format.node_tree.get_data(this.jm.mind)
+ } else if (data_format == 'freemind') {
+ data = format.freemind.get_data(this.jm.mind)
+ } else if (data_format == 'text') {
+ data = format.text.get_data(this.jm.mind)
+ } else {
+ logger.error('unsupported ' + data_format + ' format')
+ }
+ return data
+ }
+}
diff --git a/app/assets/javascripts/mind_map/jsmind/jsmind.dom.js b/app/assets/javascripts/mind_map/jsmind/jsmind.dom.js
old mode 100644
new mode 100755
index 6a748c1..18c7935
--- a/app/assets/javascripts/mind_map/jsmind/jsmind.dom.js
+++ b/app/assets/javascripts/mind_map/jsmind/jsmind.dom.js
@@ -1,49 +1,49 @@
-class Dom {
- constructor(w) {
- this.w = w
- this.d = w.document
- this.g = function (id) {
- return this.d.getElementById(id)
- }
- this.c = function (tag) {
- return this.d.createElement(tag)
- }
- this.t = function (n, t) {
- if (n.hasChildNodes()) {
- n.firstChild.nodeValue = t
- } else {
- n.appendChild(this.d.createTextNode(t))
- }
- }
-
- this.h = function (n, t) {
- if (t instanceof HTMLElement) {
- n.innerHTML = ''
- n.appendChild(t)
- } else {
- n.innerHTML = t
- }
- }
- // detect isElement
- this.i = function (el) {
- return (
- !!el &&
- typeof el === 'object' &&
- el.nodeType === 1 &&
- typeof el.style === 'object' &&
- typeof el.ownerDocument === 'object'
- )
- }
-
- //target,eventType,handler
- this.on = function (t, e, h) {
- if (!!t.addEventListener) {
- t.addEventListener(e, h, false)
- } else {
- t.attachEvent('on' + e, h)
- }
- }
- }
-}
-
-export const $ = new Dom(window)
+class Dom {
+ constructor(w) {
+ this.w = w
+ this.d = w.document
+ this.g = function (id) {
+ return this.d.getElementById(id)
+ }
+ this.c = function (tag) {
+ return this.d.createElement(tag)
+ }
+ this.t = function (n, t) {
+ if (n.hasChildNodes()) {
+ n.firstChild.nodeValue = t
+ } else {
+ n.appendChild(this.d.createTextNode(t))
+ }
+ }
+
+ this.h = function (n, t) {
+ if (t instanceof HTMLElement) {
+ n.innerHTML = ''
+ n.appendChild(t)
+ } else {
+ n.innerHTML = t
+ }
+ }
+ // detect isElement
+ this.i = function (el) {
+ return (
+ !!el &&
+ typeof el === 'object' &&
+ el.nodeType === 1 &&
+ typeof el.style === 'object' &&
+ typeof el.ownerDocument === 'object'
+ )
+ }
+
+ //target,eventType,handler
+ this.on = function (t, e, h) {
+ if (!!t.addEventListener) {
+ t.addEventListener(e, h, false)
+ } else {
+ t.attachEvent('on' + e, h)
+ }
+ }
+ }
+}
+
+export const $ = new Dom(window)
diff --git a/app/assets/javascripts/mind_map/jsmind/jsmind.format.js b/app/assets/javascripts/mind_map/jsmind/jsmind.format.js
old mode 100644
new mode 100755
index dbdb750..5b506a5
--- a/app/assets/javascripts/mind_map/jsmind/jsmind.format.js
+++ b/app/assets/javascripts/mind_map/jsmind/jsmind.format.js
@@ -1,533 +1,533 @@
-import { __author__, __version__, logger, Direction } from './jsmind.common.js'
-import { Mind } from './jsmind.mind.js'
-import { Node } from './jsmind.node.js'
-import { util } from './jsmind.util.js'
-
-const DEFAULT_META = { name: 'jsMind', author: __author__, version: __version__ }
-
-export const format = {
- node_tree: {
- example: {
- meta: DEFAULT_META,
- format: 'node_tree',
- data: { id: 'root', topic: 'jsMind node_tree example' },
- },
- get_mind: function (source) {
- var df = format.node_tree
- var mind = new Mind()
- mind.name = source.meta.name
- mind.author = source.meta.author
- mind.version = source.meta.version
- df._parse(mind, source.data)
- return mind
- },
- get_data: function (mind) {
- var df = format.node_tree
- var json = {}
- json.meta = {
- name: mind.name,
- author: mind.author,
- version: mind.version,
- }
- json.format = 'node_tree'
- json.data = df._build_node(mind.root)
- return json
- },
-
- _parse: function (mind, node_root) {
- var df = format.node_tree
- var data = df._extract_data(node_root)
- mind.set_root(node_root.id, node_root.topic, data)
- if ('children' in node_root) {
- var children = node_root.children
- for (var i = 0; i < children.length; i++) {
- df._extract_subnode(mind, mind.root, children[i])
- }
- }
- },
-
- _extract_data: function (node_json) {
- var data = {}
- for (var k in node_json) {
- if (
- k == 'id' ||
- k == 'topic' ||
- k == 'children' ||
- k == 'direction' ||
- k == 'expanded'
- ) {
- continue
- }
- data[k] = node_json[k]
- }
- return data
- },
-
- _extract_subnode: function (mind, node_parent, node_json) {
- var df = format.node_tree
- var data = df._extract_data(node_json)
- var d = null
- if (node_parent.isroot) {
- d = node_json.direction == 'left' ? Direction.left : Direction.right
- }
- var node = mind.add_node(
- node_parent,
- node_json.id,
- node_json.topic,
- data,
- d,
- node_json.expanded
- )
- if (!!node_json['children']) {
- var children = node_json.children
- for (var i = 0; i < children.length; i++) {
- df._extract_subnode(mind, node, children[i])
- }
- }
- },
-
- _build_node: function (node) {
- var df = format.node_tree
- if (!(node instanceof Node)) {
- return
- }
- var o = {
- id: node.id,
- topic: node.topic,
- expanded: node.expanded,
- }
- if (!!node.parent && node.parent.isroot) {
- o.direction = node.direction == Direction.left ? 'left' : 'right'
- }
- if (node.data != null) {
- var node_data = node.data
- for (var k in node_data) {
- o[k] = node_data[k]
- }
- }
- var children = node.children
- if (children.length > 0) {
- o.children = []
- for (var i = 0; i < children.length; i++) {
- o.children.push(df._build_node(children[i]))
- }
- }
- return o
- },
- },
-
- node_array: {
- example: {
- meta: DEFAULT_META,
- format: 'node_array',
- data: [{ id: 'root', topic: 'jsMind node_array example', isroot: true }],
- },
-
- get_mind: function (source) {
- var df = format.node_array
- var mind = new Mind()
- mind.name = source.meta.name
- mind.author = source.meta.author
- mind.version = source.meta.version
- df._parse(mind, source.data)
- return mind
- },
-
- get_data: function (mind) {
- var df = format.node_array
- var json = {}
- json.meta = {
- name: mind.name,
- author: mind.author,
- version: mind.version,
- }
- json.format = 'node_array'
- json.data = []
- df._array(mind, json.data)
- return json
- },
-
- _parse: function (mind, node_array) {
- var df = format.node_array
- var nodes = node_array.slice(0)
- // reverse array for improving looping performance
- nodes.reverse()
- var root_node = df._extract_root(mind, nodes)
- if (!!root_node) {
- df._extract_subnode(mind, root_node, nodes)
- } else {
- logger.error('root node can not be found')
- }
- },
-
- _extract_root: function (mind, node_array) {
- var df = format.node_array
- var i = node_array.length
- while (i--) {
- if ('isroot' in node_array[i] && node_array[i].isroot) {
- var root_json = node_array[i]
- var data = df._extract_data(root_json)
- var node = mind.set_root(root_json.id, root_json.topic, data)
- node_array.splice(i, 1)
- return node
- }
- }
- return null
- },
-
- _extract_subnode: function (mind, parent_node, node_array) {
- var df = format.node_array
- var i = node_array.length
- var node_json = null
- var data = null
- var extract_count = 0
- while (i--) {
- node_json = node_array[i]
- if (node_json.parentid == parent_node.id) {
- data = df._extract_data(node_json)
- var d = null
- var node_direction = node_json.direction
- if (!!node_direction) {
- d = node_direction == 'left' ? Direction.left : Direction.right
- }
- var node = mind.add_node(
- parent_node,
- node_json.id,
- node_json.topic,
- data,
- d,
- node_json.expanded
- )
- node_array.splice(i, 1)
- extract_count++
- var sub_extract_count = df._extract_subnode(mind, node, node_array)
- if (sub_extract_count > 0) {
- // reset loop index after extract subordinate node
- i = node_array.length
- extract_count += sub_extract_count
- }
- }
- }
- return extract_count
- },
-
- _extract_data: function (node_json) {
- var data = {}
- for (var k in node_json) {
- if (
- k == 'id' ||
- k == 'topic' ||
- k == 'parentid' ||
- k == 'isroot' ||
- k == 'direction' ||
- k == 'expanded'
- ) {
- continue
- }
- data[k] = node_json[k]
- }
- return data
- },
-
- _array: function (mind, node_array) {
- var df = format.node_array
- df._array_node(mind.root, node_array)
- },
-
- _array_node: function (node, node_array) {
- var df = format.node_array
- if (!(node instanceof Node)) {
- return
- }
- var o = {
- id: node.id,
- topic: node.topic,
- expanded: node.expanded,
- }
- if (!!node.parent) {
- o.parentid = node.parent.id
- }
- if (node.isroot) {
- o.isroot = true
- }
- if (!!node.parent && node.parent.isroot) {
- o.direction = node.direction == Direction.left ? 'left' : 'right'
- }
- if (node.data != null) {
- var node_data = node.data
- for (var k in node_data) {
- o[k] = node_data[k]
- }
- }
- node_array.push(o)
- var ci = node.children.length
- for (var i = 0; i < ci; i++) {
- df._array_node(node.children[i], node_array)
- }
- },
- },
-
- freemind: {
- example: {
- meta: DEFAULT_META,
- format: 'freemind',
- data: '',
- },
- get_mind: function (source) {
- var df = format.freemind
- var mind = new Mind()
- mind.name = source.meta.name
- mind.author = source.meta.author
- mind.version = source.meta.version
- var xml = source.data
- var xml_doc = df._parse_xml(xml)
- var xml_root = df._find_root(xml_doc)
- df._load_node(mind, null, xml_root)
- return mind
- },
-
- get_data: function (mind) {
- var df = format.freemind
- var json = {}
- json.meta = {
- name: mind.name,
- author: mind.author,
- version: mind.version,
- }
- json.format = 'freemind'
- var xml_lines = []
- xml_lines.push('')
- json.data = xml_lines.join('')
- return json
- },
-
- _parse_xml: function (xml) {
- var xml_doc = null
- if (window.DOMParser) {
- var parser = new DOMParser()
- xml_doc = parser.parseFromString(xml, 'text/xml')
- } else {
- // Internet Explorer
- xml_doc = new ActiveXObject('Microsoft.XMLDOM')
- xml_doc.async = false
- xml_doc.loadXML(xml)
- }
- return xml_doc
- },
-
- _find_root: function (xml_doc) {
- var nodes = xml_doc.childNodes
- var node = null
- var root = null
- var n = null
- for (var i = 0; i < nodes.length; i++) {
- n = nodes[i]
- if (n.nodeType == 1 && n.tagName == 'map') {
- node = n
- break
- }
- }
- if (!!node) {
- var ns = node.childNodes
- node = null
- for (var i = 0; i < ns.length; i++) {
- n = ns[i]
- if (n.nodeType == 1 && n.tagName == 'node') {
- node = n
- break
- }
- }
- }
- return node
- },
-
- _load_node: function (mind, parent_node, xml_node) {
- var df = format.freemind
- var node_id = xml_node.getAttribute('ID')
- var node_topic = xml_node.getAttribute('TEXT')
- var node_folded = xml_node.getAttribute('FOLDED')
- // look for richcontent
- if (node_topic == null) {
- var topic_children = xml_node.childNodes
- var topic_child = null
- for (var i = 0; i < topic_children.length; i++) {
- topic_child = topic_children[i]
- if (topic_child.nodeType == 1 && topic_child.tagName === 'richcontent') {
- node_topic = topic_child.textContent
- break
- }
- }
- }
- var node_data = df._load_attributes(xml_node)
- var node_expanded =
- 'expanded' in node_data ? node_data.expanded == 'true' : node_folded != 'true'
- delete node_data.expanded
-
- var node_position = xml_node.getAttribute('POSITION')
- var node_direction = null
- if (!!node_position) {
- node_direction = node_position == 'left' ? Direction.left : Direction.right
- }
- var node = null
- if (!!parent_node) {
- node = mind.add_node(
- parent_node,
- node_id,
- node_topic,
- node_data,
- node_direction,
- node_expanded
- )
- } else {
- node = mind.set_root(node_id, node_topic, node_data)
- }
- var children = xml_node.childNodes
- var child = null
- for (var i = 0; i < children.length; i++) {
- child = children[i]
- if (child.nodeType == 1 && child.tagName == 'node') {
- df._load_node(mind, node, child)
- }
- }
- },
-
- _load_attributes: function (xml_node) {
- var children = xml_node.childNodes
- var attr = null
- var attr_data = {}
- for (var i = 0; i < children.length; i++) {
- attr = children[i]
- if (attr.nodeType == 1 && attr.tagName === 'attribute') {
- attr_data[attr.getAttribute('NAME')] = attr.getAttribute('VALUE')
- }
- }
- return attr_data
- },
-
- _build_map: function (node, xml_lines) {
- var df = format.freemind
- var pos = null
- if (!!node.parent && node.parent.isroot) {
- pos = node.direction === Direction.left ? 'left' : 'right'
- }
- xml_lines.push('