222 lines
11 KiB
Ruby
222 lines
11 KiB
Ruby
#encoding: utf-8
|
|
$:.push File.expand_path("../lib", __FILE__)
|
|
# Maintain your gem's version:
|
|
require "patchfile/version"
|
|
bundle_update_flag = ARGV[0]=='update' || ARGV[0]=='install'
|
|
if bundle_update_flag
|
|
app_path = File.expand_path(__dir__)
|
|
dir_pwd = ENV['PWD']
|
|
template_path = dir_pwd + '/app/templates'
|
|
all_template = Dir.glob(template_path+'/*/')
|
|
#if !Dir.exist?("#{ENV['PWD']}"+"/app/assets/stylesheets/lib/jquery-ui-1.12.1/")
|
|
# puts "copying jquery-ui"
|
|
# begin
|
|
# `cp -rf "#{app_path}/updatefiles/javascripts/." "#{dir_pwd}/app/assets/javascripts/"`
|
|
# `cp -r "#{app_path}/updatefiles/accessibility/jquery-ui-1.13.2/." "#{dir_pwd}/app/assets/stylesheets/lib/jquery-ui-1.13.2/"`
|
|
# rescue
|
|
# puts "There is an error in coppying jquery-ui"
|
|
# end
|
|
#end
|
|
@original_dir = Dir.pwd
|
|
`cd "#{dir_pwd}" && git add app/templates/ app/assets built_in_extensions.rb config/mongoid.yml bin/ && cd "#{@original_dir}"` #using git to add modified files and to avoid git pull not working
|
|
#依規則重建站台的 .gitmodules(核心不追蹤此檔;放在上一行 git add 之後,避免帶 .git 的複製版型又被加回索引)
|
|
unless ENV['ORBIT_GITMODULES_REBUILT']
|
|
ENV['ORBIT_GITMODULES_REBUILT'] = '1'
|
|
begin
|
|
require 'open3'
|
|
require 'fileutils'
|
|
if Dir.exist?(File.join(dir_pwd, '.git')) && Dir.exist?(template_path)
|
|
Dir.chdir(dir_pwd) do
|
|
candidates = {}
|
|
if File.exist?('.gitmodules')
|
|
entries = {}
|
|
Open3.capture3('git', 'config', '-f', '.gitmodules', '--get-regexp', '^submodule\.')[0].each_line do |line|
|
|
k, v = line.strip.split(' ', 2)
|
|
m = k.to_s.match(/\Asubmodule\.(.+)\.(path|url|branch)\z/)
|
|
(entries[m[1]] ||= {})[m[2]] = v.to_s if m
|
|
end
|
|
entries.each_value { |e| candidates[e['path']] = e if e['path'].to_s.start_with?('app/templates/') }
|
|
end
|
|
gitlinks = Open3.capture3('git', 'ls-files', '-s', '--', 'app/templates')[0].lines.map { |l| l.strip.split(/\s+/, 4) }.select { |l| l[0] == '160000' }.map { |l| l[3] }
|
|
gitlinks.each { |p| candidates[p] ||= {'path' => p} }
|
|
keep = {}
|
|
candidates.each do |path, e|
|
|
next unless gitlinks.include?(path) && File.exist?(File.join(path, 'template.json'))
|
|
url = e['url'].to_s
|
|
url = Open3.capture3('git', '-C', path, 'remote', 'get-url', 'origin')[0].strip if url.empty?
|
|
next if url.empty? || File.basename(path) != File.basename(url).sub(/\.git\z/, '')
|
|
remote_head, _, st = Open3.capture3({'GIT_TERMINAL_PROMPT' => '0'}, 'timeout', '20', 'git', 'ls-remote', '--symref', url, 'HEAD')
|
|
next unless st.success?
|
|
branch = Open3.capture3('git', '-C', path, 'rev-parse', '--abbrev-ref', 'HEAD')[0].strip
|
|
branch = e['branch'].to_s if branch.empty? || branch == 'HEAD'
|
|
branch = remote_head[%r{ref: refs/heads/(\S+)\s+HEAD}, 1].to_s if branch.empty?
|
|
keep[path] = {'url' => url, 'branch' => branch}
|
|
end
|
|
File.open('.gitmodules', 'w') do |f|
|
|
keep.each do |path, e|
|
|
f.puts "[submodule \"#{path}\"]"
|
|
f.puts "\tpath = #{path}"
|
|
f.puts "\turl = #{e['url']}"
|
|
f.puts "\tbranch = #{e['branch']}" unless e['branch'].empty?
|
|
end
|
|
end
|
|
system('git', 'rm', '-q', '--cached', '--ignore-unmatch', '--', '.gitmodules')
|
|
(gitlinks - keep.keys).each { |p| system('git', 'rm', '-q', '--cached', '--', p) }
|
|
Dir.glob('app/templates/*/.git').each do |g|
|
|
next unless File.directory?(g)
|
|
next if keep.key?(File.dirname(g))
|
|
FileUtils.rm_rf(g)
|
|
puts "removed copied .git in #{File.dirname(g)}"
|
|
end
|
|
end
|
|
puts "finish rebuilding .gitmodules in #{dir_pwd}"
|
|
end
|
|
rescue => e
|
|
puts "rebuild .gitmodules failed: #{e.inspect}"
|
|
end
|
|
end
|
|
#Add patchfile to Admin area
|
|
@patchfile_li = File.read(app_path+"/patchfile_li.txt").force_encoding('UTF-8')
|
|
@patchfile_li_choices = File.read(app_path+"/patchfile_li_choices.txt").force_encoding('UTF-8')
|
|
@file_text = File.read(dir_pwd+'/app/views/shared/_side_bar.html.erb').force_encoding('UTF-8')
|
|
if !@file_text.include?('<div class="patchfile sub-nav-block icons-megaphone">')
|
|
@indert_index = @file_text.index('</nav>')
|
|
unless @indert_index.nil?
|
|
@file_text.insert(@indert_index , @patchfile_li_choices)
|
|
end
|
|
end
|
|
if !@file_text.include?('patchfile_li')
|
|
@indert_index = @file_text.index('<li title="<%= t(\'site_info\') %>">')
|
|
unless @indert_index.nil?
|
|
@file_text.insert(@indert_index , @patchfile_li)
|
|
end
|
|
end
|
|
begin
|
|
f = File.open(dir_pwd+'/app/views/shared/_side_bar.html.erb','w')
|
|
f.write(@file_text)
|
|
f.close
|
|
puts "finish change patchfile in #{dir_pwd}/app/views/shared"
|
|
rescue
|
|
puts "Permission denied in #{dir_pwd}/app/views/shared"
|
|
end
|
|
change_text = '<a title="{{site_title_1}}" class="navbar-brand" href="{{home_link_1}}"><img class="site-logo" src="{{logo_url_1}}" alt="Site Logo"></a><script>$(document).ready(function(){var url =$(\'.site-logo\').eq(0).attr(\'src\');if(url == "/assets/default-site-logo.png"){$(\'.navbar-brand\').eq(0).remove();};if($(\'.navbar-brand\').length == 2){$(\'.site-logo\').css(\'height\',\'auto\')};$(\'.site-logo\').eq(0).css(\'margin-right\',0);$(\'.navbar-brand\').css(\'padding-right\',0)})</script><a title="{{site_title}}" class="navbar-brand" href="{{home_link}}"><img class="site-logo" src="{{logo_url}}" alt="Site Logo"> {{site_name}}</a>'
|
|
change_text_fix = '<a title="{{site_title_1}}" class="" href="{{home_link_1}}"><img class="site-logo" src="{{logo_url_1}}" alt="Site Logo"></a><script>$(document).ready(function(){var url =$(\'.site-logo\').eq(0).attr(\'src\');if(url == "/assets/default-site-logo.png"){$(\'.navbar-brand\').eq(0).remove();};if($(\'.navbar-brand\').length == 2){$(\'.site-logo\').css(\'height\',\'auto\')};$(\'.site-logo\').eq(0).css(\'margin-right\',0);$(\'.navbar-brand\').css(\'padding-right\',0)})</script><a title="{{site_title}}" class="" href="{{home_link}}"><img class="site-logo" src="{{logo_url}}" alt="Site Logo"> {{site_name}}</a>'
|
|
change_text_fix1 = '<a title="{{site_title_1}}" class="" href="{{home_link_1}}"><img class="site-logo" src="{{logo_url_1}}" alt="Site Logo"></a><script>$(document).ready(function(){var url =$(\'.site-logo\').eq(0).attr(\'src\');if(url == "/assets/default-site-logo.png"){if($(\'.navbar-brand\').length != 0){$(\'.navbar-brand\').eq(0).remove();}else{$(\'.site-title >a\').eq(0).remove();}};if($(\'.navbar-brand\').length == 2 || $(\'.site-title >a\').length == 2){$(\'.site-logo\').css(\'height\',\'auto\')};$(\'.site-logo\').eq(0).css(\'margin-right\',0);$(\'.navbar-brand\').css(\'padding-right\',0)})</script><a title="{{site_title}}" class="" href="{{home_link}}"><img class="site-logo" src="{{logo_url}}" alt="Site Logo"> {{site_name}}</a>'
|
|
all_template.each do |folder|
|
|
if !folder.include?('mobile')
|
|
#begin
|
|
# filename = folder+'partial/_head.html.erb'
|
|
# texts = File.read(filename).force_encoding('UTF-8')
|
|
# new_texts = texts.gsub(/<.*javascript_include_tag.*bootstrap.*>/,"<%= javascript_include_tag \"bootstrap.min\"%>")
|
|
# bootstrap_count = 0
|
|
# new_texts = new_texts.gsub("<%= javascript_include_tag \"bootstrap.min\"%>"){|t|
|
|
# bootstrap_count += 1
|
|
# (bootstrap_count > 1) ? "" : t
|
|
# }
|
|
# if new_texts.include?('jquery_prefix')
|
|
# new_texts = new_texts.gsub(/<.*javascript_include_tag.*\/jquery\.min.*>|<.*javascript_include_tag.*\/jquery-1\.11\.0\.min.*>/,"<%= javascript_include_tag \"jquery.min\"%>")
|
|
# else
|
|
# new_texts = new_texts.gsub(/<%= javascript_include_tag \"jquery.min\"%>/,"<%= javascript_include_tag \"jquery.min\"%>\n\t<%= javascript_include_tag \"jquery_prefix\"%>")
|
|
# end
|
|
# if texts != new_texts
|
|
# File.open(filename,'w') do |f|
|
|
# f.write new_texts
|
|
# end
|
|
# end
|
|
#rescue => e
|
|
# puts "#{e.inspect}\nnot found #{folder}partial/_head.html.erb"
|
|
#end
|
|
|
|
begin
|
|
begin
|
|
require 'nokogiri'
|
|
rescue ScriptError => e
|
|
if RUBY_VERSION.to_f <= 2.1
|
|
nokogiri_version = '1.7.0.1'
|
|
else
|
|
nokogiri_version = '1.8.5'
|
|
end
|
|
flag = system("gem install nokogiri -v #{nokogiri_version}")
|
|
if flag
|
|
gem_home = ENV["GEM_HOME"]
|
|
if !gem_home.nil?
|
|
$LOAD_PATH << "#{gem_home}/gems/nokogiri-#{nokogiri_version}/lib"
|
|
$LOAD_PATH << "#{gem_home}/extensions/#{RUBY_PLATFORM}/#{RUBY_VERSION}/nokogiri-#{nokogiri_version}"
|
|
require 'nokogiri'
|
|
end
|
|
else
|
|
next
|
|
end
|
|
end
|
|
puts "changing header.html.erb in #{folder}/home/header.html.erb"
|
|
if folder.split('/')[-1] != 'mobile'
|
|
filename = folder+'home/header.html.erb'
|
|
texts = File.read(filename).force_encoding('UTF-8')
|
|
texts_html = Nokogiri::HTML.parse(texts)
|
|
if texts_html.css('.navbar-brand').length == 1
|
|
new_texts = texts.gsub(texts_html.css('.navbar-brand').to_s.gsub("%7B",'{').gsub('%7D','}'),change_text)
|
|
File.open(filename,'w') do |f|
|
|
f.write new_texts
|
|
end
|
|
elsif texts_html.css('.site-title >a').length == 1 && texts_html.css('.navbar-brand').length == 0
|
|
new_texts = texts.gsub(texts_html.css('.site-title >a').to_s.gsub("%7B",'{').gsub('%7D','}'),change_text_fix1)
|
|
File.open(filename,'w') do |f|
|
|
f.write new_texts
|
|
end
|
|
elsif texts_html.css('.site-title >a.navbar-brand').length == 2
|
|
new_texts = texts.gsub(change_text,change_text_fix1)
|
|
File.open(filename,'w') do |f|
|
|
f.write new_texts
|
|
end
|
|
elsif texts.include? change_text_fix
|
|
new_texts = texts.gsub(change_text_fix,change_text_fix1)
|
|
File.open(filename,'w') do |f|
|
|
f.write new_texts
|
|
end
|
|
end
|
|
end
|
|
rescue => e
|
|
puts "#{e.inspect}\nnot found #{folder}home/header.html.erb"
|
|
end
|
|
end
|
|
end
|
|
#begin
|
|
# system("cp -f #{app_path}/updatefiles/application_helper.rb #{dir_pwd}/app/helpers/application_helper.rb")
|
|
#rescue => e
|
|
# puts e.backtrace
|
|
#end
|
|
#change_html_old = 'html.gsub("%7B%7Blogo_url_1%7D%7D",((site.site_logo_1.url.nil? ? "/assets/default-site-logo.png" : site.site_logo_1.url) rescue "/assets/default-site-logo.pngs"))'
|
|
#change_html_new = 'html.gsub("%7B%7Blogo_url_1%7D%7D",((site.site_logo_1.url.nil? ? "/assets/default-site-logo.png" : site.site_logo_1.url) rescue "/assets/default-site-logo.png"))'
|
|
#begin
|
|
# @file_text = File.read(ENV['PWD']+'/app/helpers/application_helper.rb')
|
|
# File.open(ENV['PWD']+'/app/helpers/application_helper.rb_new','w+') do |f|
|
|
# f.chmod 0777
|
|
# if @file_text.include?(change_html_old)
|
|
# @file_text = @file_text.gsub(change_html_old,change_html_new)
|
|
# elsif (!@file_text.include?(change_html_old) && !@file_text.include?(change_html_new))
|
|
# insert_index = @file_text.index('html.gsub("%7B%7Blogo_url%7D%7D"')
|
|
# @file_text.insert(insert_index,change_html_new+"\n")
|
|
# end
|
|
# f.write(@file_text)
|
|
# end
|
|
# system("cp #{ENV['PWD']+'/app/helpers/application_helper.rb_new'} #{ENV['PWD']+'/app/helpers/application_helper.rb'}")
|
|
# puts "finish change application_helper.rb in #{ENV['PWD']}/app/helpers/"
|
|
#rescue => e
|
|
# puts "Permission denied in #{ENV['PWD']}/app/helpers/application_helper.rb"
|
|
#end
|
|
end
|
|
# Describe your gem and declare its dependencies:
|
|
Gem::Specification.new do |s|
|
|
s.name = "patchfile"
|
|
s.version = Patchfile::VERSION
|
|
s.authors = ["Ruling Digital"]
|
|
s.email = ["bohung@rulingcom.com"]
|
|
s.homepage = "http://www.rulingcom.com"
|
|
s.summary = "Patch file for Orbit"
|
|
s.description = "Patch file for Orbit"
|
|
s.license = "MIT"
|
|
s.add_dependency "nokogiri"
|
|
s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
|
|
s.test_files = Dir["test/**/*"]
|
|
end
|