diff --git a/Gemfile b/Gemfile index ba9f819..807b315 100644 --- a/Gemfile +++ b/Gemfile @@ -1,19 +1,20 @@ source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '4.0.3' +gem 'rails', '4.1.0.rc2' gem 'mongoid', github: 'mongoid/mongoid' # Use SCSS for stylesheets gem 'sass-rails', '~> 4.0.0' gem 'nokogiri' + # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .js.coffee assets and views gem 'coffee-rails', '~> 4.0.0' - +gem 'announcement', path: '/Volumes/MyData/github/orbit4.5/announcement' # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby @@ -25,7 +26,7 @@ gem 'turbolinks' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 1.2' - +gem "active_model_serializers" group :doc do # bundle exec rake doc:rails generates the API under doc/api. diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index ba1a152..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,148 +0,0 @@ -GIT - remote: git://github.com/mongoid/mongoid.git - revision: c8af8d0836b086cebc4a609037a97747e9f3359b - specs: - mongoid (4.0.0.beta1) - activemodel (>= 4.0.0) - moped (~> 2.0.beta6) - origin (~> 2.1) - tzinfo (>= 0.3.37) - -GEM - remote: https://rubygems.org/ - specs: - actionmailer (4.0.3) - actionpack (= 4.0.3) - mail (~> 2.5.4) - actionpack (4.0.3) - activesupport (= 4.0.3) - builder (~> 3.1.0) - erubis (~> 2.7.0) - rack (~> 1.5.2) - rack-test (~> 0.6.2) - activemodel (4.0.3) - activesupport (= 4.0.3) - builder (~> 3.1.0) - activerecord (4.0.3) - activemodel (= 4.0.3) - activerecord-deprecated_finders (~> 1.0.2) - activesupport (= 4.0.3) - arel (~> 4.0.0) - activerecord-deprecated_finders (1.0.3) - activesupport (4.0.3) - i18n (~> 0.6, >= 0.6.4) - minitest (~> 4.2) - multi_json (~> 1.3) - thread_safe (~> 0.1) - tzinfo (~> 0.3.37) - arel (4.0.2) - atomic (1.1.15) - bson (2.2.1) - builder (3.1.4) - coffee-rails (4.0.1) - coffee-script (>= 2.2.0) - railties (>= 4.0.0, < 5.0) - coffee-script (2.2.0) - coffee-script-source - execjs - coffee-script-source (1.7.0) - columnize (0.3.6) - connection_pool (1.2.0) - debugger (1.6.5) - columnize (>= 0.3.1) - debugger-linecache (~> 1.2.0) - debugger-ruby_core_source (~> 1.3.1) - debugger-linecache (1.2.0) - debugger-ruby_core_source (1.3.1) - erubis (2.7.0) - execjs (2.0.2) - hike (1.2.3) - i18n (0.6.9) - jbuilder (1.5.3) - activesupport (>= 3.0.0) - multi_json (>= 1.2.0) - jquery-rails (3.1.0) - railties (>= 3.0, < 5.0) - thor (>= 0.14, < 2.0) - json (1.8.1) - mail (2.5.4) - mime-types (~> 1.16) - treetop (~> 1.4.8) - mime-types (1.25.1) - mini_portile (0.5.2) - minitest (4.7.5) - moped (2.0.0.beta6) - bson (~> 2.2) - connection_pool (~> 1.2) - optionable (~> 0.2.0) - multi_json (1.8.4) - nokogiri (1.6.1) - mini_portile (~> 0.5.0) - optionable (0.2.0) - origin (2.1.0) - polyglot (0.3.4) - rack (1.5.2) - rack-test (0.6.2) - rack (>= 1.0) - rails (4.0.3) - actionmailer (= 4.0.3) - actionpack (= 4.0.3) - activerecord (= 4.0.3) - activesupport (= 4.0.3) - bundler (>= 1.3.0, < 2.0) - railties (= 4.0.3) - sprockets-rails (~> 2.0.0) - railties (4.0.3) - actionpack (= 4.0.3) - activesupport (= 4.0.3) - rake (>= 0.8.7) - thor (>= 0.18.1, < 2.0) - rake (10.1.1) - rdoc (4.1.1) - json (~> 1.4) - sass (3.2.14) - sass-rails (4.0.1) - railties (>= 4.0.0, < 5.0) - sass (>= 3.1.10) - sprockets-rails (~> 2.0.0) - sdoc (0.4.0) - json (~> 1.8) - rdoc (~> 4.0, < 5.0) - sprockets (2.11.0) - hike (~> 1.2) - multi_json (~> 1.0) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.0.1) - actionpack (>= 3.0) - activesupport (>= 3.0) - sprockets (~> 2.8) - thor (0.18.1) - thread_safe (0.2.0) - atomic (>= 1.1.7, < 2) - tilt (1.4.1) - treetop (1.4.15) - polyglot - polyglot (>= 0.3.1) - turbolinks (2.2.1) - coffee-rails - tzinfo (0.3.38) - uglifier (2.4.0) - execjs (>= 0.3.0) - json (>= 1.8.0) - -PLATFORMS - ruby - -DEPENDENCIES - coffee-rails (~> 4.0.0) - debugger - jbuilder (~> 1.2) - jquery-rails - mongoid! - nokogiri - rails (= 4.0.3) - sass-rails (~> 4.0.0) - sdoc - turbolinks - uglifier (>= 1.3.0) diff --git a/app/assets/javascripts/home.js.coffee b/app/assets/javascripts/announcements.js.coffee similarity index 100% rename from app/assets/javascripts/home.js.coffee rename to app/assets/javascripts/announcements.js.coffee diff --git a/app/assets/javascripts/edit-main.js b/app/assets/javascripts/edit-main.js new file mode 100644 index 0000000..d308029 --- /dev/null +++ b/app/assets/javascripts/edit-main.js @@ -0,0 +1,48 @@ +(function(){ + var getUrlVars = function(){ + var vars = [], hash; + var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); + for(var i = 0; i < hashes.length; i++){ + hash = hashes[i].split('='); + vars.push(decodeURIComponent(hash[0])); + vars[decodeURIComponent(hash[0])] = decodeURIComponent(hash[1]); + } + if(vars[0] == window.location.href){ + vars =[]; + } + return vars; + } + var page_params = getUrlVars(); + + $(document).ready(function(){ + $("head").append(" "); + $.ajax({ + url : "/page_parts/info", + dataType : "json", + type : "get", + data : {"page_id" : page_params["id"]} + }).done(function(data){ + $.each(data.parts,function(i,part){ + var page_part = $("*[" + part.name + "]"); + $.each(part.subparts,function(x,subpart){ + var newsub = $("
" + subpart.module + "/" + subpart.widget + "
"); + page_part.prepend(newsub); + }) + }) + }) + + $("*[data-pp]").each(function(){ + var add_btn = $("

"), + part = $(this); + add_btn.click(function(){ + if(part.find("*[data-ps]").length){ + window.location.href = "/page_parts/" + part.data("pp") + "/edit?page_id=" + page_params["id"]; + }else{ + window.location.href = "/page_parts/new?part=" + part.data("pp") + "&page_id=" + page_params["id"]; + } + }) + $(this).append(add_btn); + }) + + }) +})(); \ No newline at end of file diff --git a/app/assets/javascripts/edit.js b/app/assets/javascripts/edit.js new file mode 100644 index 0000000..e3f1b00 --- /dev/null +++ b/app/assets/javascripts/edit.js @@ -0,0 +1,15 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details +// about supported directives. +// + +//= require loadjquery +//= require edit-main \ No newline at end of file diff --git a/app/assets/javascripts/users.js.coffee b/app/assets/javascripts/users.js.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/users.js.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/home.css.scss b/app/assets/stylesheets/announcements.css.scss similarity index 61% rename from app/assets/stylesheets/home.css.scss rename to app/assets/stylesheets/announcements.css.scss index f0ddc68..72e63be 100644 --- a/app/assets/stylesheets/home.css.scss +++ b/app/assets/stylesheets/announcements.css.scss @@ -1,3 +1,3 @@ -// Place all the styles related to the home controller here. +// Place all the styles related to the announcements controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/pp-add-edit.css b/app/assets/stylesheets/pp-add-edit.css new file mode 100644 index 0000000..b07b3cf --- /dev/null +++ b/app/assets/stylesheets/pp-add-edit.css @@ -0,0 +1,70 @@ +/* +
+
+

+
+*/ +*[data-pp] { + margin: 0 auto; + position: relative; +} +*[data-pp] > *[data-ps] { + padding: 3px; + height: 50px; + outline: thin dotted #EBB666; + cursor: pointer; + position: relative; +} +*[data-pp] > *[data-ps]:before { + content: ""; + line-height: 100%; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #a1a1a1; + opacity: 0.6; + filter: alpha(opacity=60); +} +*[data-pp] > *[data-ps]:after { + font-size: 1rem; + font-weight: 300; + content: "Edit"; + text-align: center; + margin-top: -0.7rem; + position: absolute; + top: 50%; + right: 0; + left: 0; +} +*[data-pp] > *[data-ps]:hover:before { + opacity: 0.8; + filter: alpha(opacity=80); +} +*[data-pp] > *[data-ps]:hover:after { + font-weight: 400; +} +*[data-pp] > .add-ps { + text-align: center; + position: relative; + width: 100%; + min-height: 2rem; + line-height: 2rem; + cursor: pointer; +} +*[data-pp] > .add-ps:after { + font-size: 1rem; + font-weight: 300; + content: "Add"; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #e0dbcb; +} +*[data-pp] > .add-ps:hover:after { + font-weight: 400; + background-color: #923132; +} diff --git a/app/assets/stylesheets/users.css.scss b/app/assets/stylesheets/users.css.scss deleted file mode 100644 index 1efc835..0000000 --- a/app/assets/stylesheets/users.css.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the users controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d83690e..b2e9772 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,4 +2,21 @@ class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception + before_action :set_locale + def default_url_options(options={}) + { locale: I18n.locale } + end + + def set_locale + I18n.locale = params[:locale] || I18n.default_locale + end + + def get_layout + f = File.join("../../templates/", "#{@key}", '/home/page.html.erb') + end + + def get_key + @key = Template::KEY + end + end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index db4b80d..ed6bb7b 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -29,15 +29,11 @@ class HomeController < ApplicationController private - def get_key - @key = Template::KEY - end - def get_layout if params[:name] - File.join("../../templates", "#{@key}", '/home/page.html.erb') + File.join("../../templates/", "#{@key}", '/home/page.html.erb') else - false + false end end end diff --git a/app/controllers/page_parts_controller.rb b/app/controllers/page_parts_controller.rb new file mode 100644 index 0000000..5615b9f --- /dev/null +++ b/app/controllers/page_parts_controller.rb @@ -0,0 +1,72 @@ +class PagePartsController < ApplicationController + before_action :get_key + def new + @part = PagePart.new + @part.sub_parts.build + @modules = [] + @part_number = params[:part] + @page_id = params[:page_id] + Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/*").each do |m| + @modules << m.gsub("#{Rails.root}/app/templates/#{@key}/modules/","") + end + end + + def edit + page = Page.find(params[:page_id]) + @part = page.page_parts.where(:part_id => params[:id]).first + @part.sub_parts.build + @modules = [] + @page_id = params[:page_id] + Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/*").each do |m| + @modules << m.gsub("#{Rails.root}/app/templates/#{@key}/modules/","") + end + end + + def getwidgets + module_name = params[:module] + @select_number = params[:number_of_select] + @widgets = [] + Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/#{module_name}/*").each do |w| + w = File.basename(w, ".*") + w = File.basename(w, ".*") + @widgets << w.gsub("_","") if w != "index" && w != "show" + end + render :layout => false + end + + def info + page = Page.find(params[:page_id]) + parts = page.page_parts + data = [] + parts.each do |part| + partid = "data-pp=" + part.part_id.to_s + subparts = part.sub_parts + subpart = [] + subparts.each do |p| + subpart << {"module" => p.module, "widget" => p.widget} + end + data << {"name" => partid, "subparts" => subpart} + end + render :json => {"parts" => data}.to_json + end + + def create + @part = PagePart.new(part_params) + @part.save! + redirect_to pages_edit_view_path(:id => params[:page_part][:page_id]) + end + + def update + @part = PagePart.find(params[:page_part][:page_part_id]) + @part.update_attributes(part_params) + redirect_to pages_edit_view_path(:id => params[:page_part][:page_id]) + + end + + private + + def part_params + params.require(:page_part).permit(:part_id, :page_id, sub_parts_attributes: [:module, :widget, :id]) + end + +end \ No newline at end of file diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb new file mode 100644 index 0000000..4788d04 --- /dev/null +++ b/app/controllers/pages_controller.rb @@ -0,0 +1,153 @@ +class PagesController < ApplicationController + before_action :get_key + layout :get_layout + include PagesHelper + + def index + @pages = Page.all + # render json: @pages + end + + def edit_view + @manifest = @key + @dataApi = "edit" + + # @qq = render_to_string(:partial => @p, :layout => false) + render get_view + end + + def show + page = Page.find_by_param(params[:page_id]) rescue nil + module_app = page.module.downcase.pluralize + params[:target_controller] = "#{module_app}" + @manifest = @key + @dataApi = nil + OrbitHelper.set_params params + OrbitHelper.set_site_locale locale + params[:target_action] = "index" + params[:url] = page.url + render render_final_page("#{module_app}/show",page) + end + + def moduleShow + page = Page.find_by_param(params[:page_id]) + params[:target_action] = "show" + params[:uid] = params[:uid] + module_app = page.module.downcase.pluralize + params[:target_controller] = "#{module_app}" + @manifest = @key + @dataApi = nil + OrbitHelper.set_params params + OrbitHelper.set_site_locale locale + render render_final_page("#{module_app}/show",page) + end + + def preview + render render_final_page + end + + + + def new + @page = Page.new + @pages = Page.where(:page_id.ne => "" , :page_id.exists => true) + @modules = ModuleApp.all + + end + + def create + @page = Page.new(page_params) + @page.save! + redirect_to pages_path + end + + private + + def render_final_page(original_view=get_view,page) + + parts = page.page_parts + @part_partials = {} + + parts.each do |part| + subparts = part.sub_parts + partials = [] + subparts.each do |subpart| + # partials << render_to_string(:partial => get_widget_path(widget_path)) + partials << render_widget_for_frontend(params[:target_controller],"widget",subpart.widget) + end + @part_partials["data-pp='#{part.part_id}'"] = partials + end + + @file = nil + @layout_html = nil + @file = File.join('../templates', "#{@key}", '/home/page.html.erb') + @layout_html = render_to_string(@file) + doc = Nokogiri::HTML(@layout_html) + + @part_partials.each do |key, partial| + html_string = "" + partial.each do |p| + html_string = html_string + p + end + pp = doc.css("*[#{key}]") + pp = pp[0] + pp.inner_html = html_string + end + + viewarea = doc.css("*[data-content='true']") + viewarea = viewarea[0] + viewarea.inner_html = render_to_string(original_view) + newlayout = "#{page.name}_layout.html.erb" + file_path = File.join(Rails.root, 'app', 'views', 'frontend', newlayout) + + f = File.open(file_path,"w") + f.write(doc.to_html) + f.close + view_to_render = "frontend/#{newlayout}" + view_to_render + end + + def get_widget_path(widget) + file = File.join('../templates', "#{@key}", "modules/#{widget}") + end + + def get_view + page = Page.find(params[:id]) + + if page.page_id == "home" + @view = File.join(Rails.root, 'app', 'templates', "#{@key}", '/home/index.html.erb') + else + module_name = page.module.downcase.pluralize + @view = File.join(Rails.root, 'app', 'templates', "#{@key}", "modules/#{module_name}/index.html.erb") + end + end + + def page_params + if params[:page][:parent_page] == "" + params[:page][:parent_page] = nil + @url = "/#{params[:page][:page_id]}" + else + page = Page.find(params[:page][:parent_page]) + @url = page.url + "/#{params[:page][:page_id]}" + end + p = params.require(:page).permit(:number, :page_id, :module, :parent_page, name_translations: [:en, :zh_tw]) + p["url"] = @url + p + end + + def get_layout + if request[:action] == "edit_view" + page = Page.find(params[:id]) + if page.page_id == "home" + false + else + File.join("../../templates", "#{@key}", '/home/page.html.erb') + end + # elsif request[:action] == "show" || request[:action] == "moduleShow" + # File.join("../../templates", "themes", "#{@key}", '/home/page.html.erb') + else + false + end + end + +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index bd56f2c..b487258 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2,7 +2,7 @@ require "json" module ApplicationHelper def render_widget(widget) key = Template::KEY - file = File.join('../templates', "#{key}", "modules/#{widget}") + file = File.join("../templates", "#{key}", "modules/#{widget}") render :partial => file end @@ -10,11 +10,28 @@ module ApplicationHelper "/module/#{module_name}/show" end + + def render_menu - json_file = File.read(File.join(Rails.root, 'public', "menu.json")) - @items = JSON.parse(json_file) + # json_file = File.read(File.join(Rails.root, 'public', "menu.json")) + # @items = JSON.parse(json_file) + @pages = Page.where(:parent_page_id.ne => "" , :parent_page_id.exists => false, :page_id.ne => "", :page_id.exists => true) + + def create_json(pages) + item = {} + pages.each do |page| + if page.child_page.size > 0 + item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "children"=>create_json(page.child_page)} + else + item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url} + end + end + item + end + @items = create_json(@pages) + key = Template::KEY - menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{key}", '/home/menu.html.erb')) + menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{key}", '/home/menu.html.erb')) doc = Nokogiri::HTML(menu_file) menu_file.close @@ -63,4 +80,48 @@ module ApplicationHelper h.html_safe end + def render_view + if params[:target_action] == "index" + file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller], "#{params[:target_action]}.html.erb")) + doc = Nokogiri::HTML(file) + file.close + wrap_elements = doc.css("*[data-module]") + controller = "#{params[:target_controller].capitalize}Controller".classify.constantize.new + data = controller.send("#{params[:target_action]}") + wrap_elements.each do |wrap_element| + html_to_render = "" + data.each do |item| + el = wrap_element.inner_html + item.each do |key,value| + el = el.gsub("{{#{key}}}",value) + el = el.gsub("%7B%7B#{key}%7D%7D",value) + end + html_to_render = html_to_render + el + end + wrap_element.inner_html = html_to_render + end + doc.to_s.html_safe + elsif params[:target_action] == "show" + file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller], "#{params[:target_action]}.html.erb")) + doc = Nokogiri::HTML(file) + file.close + wrap_element_html = doc.to_s + html_to_render = "" + controller = "#{params[:target_controller].capitalize}Controller".classify.constantize.new + data = controller.send("#{params[:target_action]}") + el = wrap_element_html + data.each do |key,value| + el = el.gsub("{{#{key}}}",value) + el = el.gsub("%7B%7B#{key}%7D%7D",value) + end + el.html_safe + end + end + + def action_data + controller = "#{params[:target_controller].capitalize}Controller".constantize.new + data = controller.send("#{params[:target_action]}") + data + end + end diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb new file mode 100644 index 0000000..5b17191 --- /dev/null +++ b/app/helpers/orbit_helper.rb @@ -0,0 +1,21 @@ +module OrbitHelper + def self.set_params(params) + @params = params + end + + def self.get_params + @params + end + + def self.url_to_show(uid,title) + "/#{self.get_site_locale.to_s}#{@params[:url]}/#{uid}/#{title.parameterize}" + end + + def self.set_site_locale(locale) + @site_locale = locale + end + + def self.get_site_locale + @site_locale + end +end diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb new file mode 100644 index 0000000..3c5053a --- /dev/null +++ b/app/helpers/pages_helper.rb @@ -0,0 +1,36 @@ +module PagesHelper + + def parse_pp_tags(file) + opened_file = File.open(file) + doc = Nokogiri::HTML(opened_file) + opened_file.close + pps = doc.css("*[data-pp]") + pps.each do |pp| + pp.content = "

" + end + doc.to_html + end + + def render_widget_for_frontend(controller_name, widget_method, widget_file) + file = File.open(File.join(Rails.root, 'app', 'templates', "#{Template::KEY}", 'modules', "#{controller_name}", "_#{widget_file}.html.erb")) + doc = Nokogiri::HTML(file) + file.close + wrap_elements = doc.css("*[data-repeat]") + controller = "#{controller_name.capitalize}Controller".classify.constantize.new + data = controller.send("#{widget_method}") + wrap_elements.each do |wrap_element| + html_to_render = "" + data.each do |item| + el = wrap_element.inner_html + item.each do |key,value| + el = el.gsub("{{#{key}}}",value) + el = el.gsub("%7B%7B#{key}%7D%7D",value) + end + html_to_render = html_to_render + el + end + wrap_element.inner_html = html_to_render + end + doc.to_s.html_safe + end + +end diff --git a/app/models/concerns/slug.rb b/app/models/concerns/slug.rb new file mode 100644 index 0000000..56a0537 --- /dev/null +++ b/app/models/concerns/slug.rb @@ -0,0 +1,16 @@ + module Slug + extend ActiveSupport::Concern + + def slug + if not respond_to? :title or title.empty? + id + else + I18n.locale + title.parameterize + end + end + + def to_param + slug + end +end \ No newline at end of file diff --git a/app/models/module_app.rb b/app/models/module_app.rb new file mode 100644 index 0000000..6ea15b4 --- /dev/null +++ b/app/models/module_app.rb @@ -0,0 +1,5 @@ +class ModuleApp + include Mongoid::Document + field :title, type: String + field :key, type: String +end diff --git a/app/models/page.rb b/app/models/page.rb new file mode 100644 index 0000000..45c8219 --- /dev/null +++ b/app/models/page.rb @@ -0,0 +1,23 @@ +class Page + include Mongoid::Document + include Mongoid::Timestamps + + field :name, localize: true + field :number, type: Integer + field :module + field :url + field :page_id + + has_many :page_parts, :autosave => true, :dependent => :destroy + + has_many :child_page, :class_name => 'Page', :inverse_of => :parent_page + belongs_to :parent_page, :class_name => 'Page', :inverse_of => :child_page + + def to_param + page_id.parameterize + end + + def self.find_by_param(input) + self.find_by(page_id: input) rescue nil + end +end \ No newline at end of file diff --git a/app/models/page_part.rb b/app/models/page_part.rb new file mode 100644 index 0000000..c1d0851 --- /dev/null +++ b/app/models/page_part.rb @@ -0,0 +1,12 @@ +class PagePart + include Mongoid::Document + include Mongoid::Timestamps + + field :part_id, type: Integer + + belongs_to :page + has_many :sub_parts, :dependent => :destroy + + accepts_nested_attributes_for :sub_parts, :allow_destroy => true + +end \ No newline at end of file diff --git a/app/models/page_relationship.rb b/app/models/page_relationship.rb new file mode 100644 index 0000000..9268540 --- /dev/null +++ b/app/models/page_relationship.rb @@ -0,0 +1,10 @@ +class PageRelationship + include Mongoid::Document + include Mongoid::Timestamps + + field :page_id, type: String + field :child_id, type: String + + belongs_to :parent, :class_name => "Page" + belongs_to :child, :class_name => "Page" +end diff --git a/app/models/sub_part.rb b/app/models/sub_part.rb new file mode 100644 index 0000000..6f49abc --- /dev/null +++ b/app/models/sub_part.rb @@ -0,0 +1,9 @@ +class SubPart + include Mongoid::Document + include Mongoid::Timestamps + + field :module + field :widget + + belongs_to :page_part +end \ No newline at end of file diff --git a/app/serializers/page_serializer.rb b/app/serializers/page_serializer.rb new file mode 100644 index 0000000..df3f4b8 --- /dev/null +++ b/app/serializers/page_serializer.rb @@ -0,0 +1,4 @@ +class PageSerializer < ActiveModel::Serializer + attributes :url, :name + has_many :child_page +end diff --git a/app/templates/orbit_classic/home/index.html.erb b/app/templates/orbit_classic/home/index.html.erb index 234b651..a993054 100644 --- a/app/templates/orbit_classic/home/index.html.erb +++ b/app/templates/orbit_classic/home/index.html.erb @@ -1,5 +1,4 @@ - - + @@ -7,8 +6,7 @@ Orbit Classic <%= stylesheet_link_tag "#{@manifest}"%> <%= javascript_include_tag "#{@manifest}"%> - <%= javascript_include_tag "#{@dataApi}"%> - + <%= javascript_include_tag "#{@dataApi}" if @dataApi != nil%>