diff --git a/plemp.rb b/plemp.rb index 539251c..63f8401 100644 --- a/plemp.rb +++ b/plemp.rb @@ -1,3 +1,4 @@ +require "active_record" require "camping" require "coderay" require "fileutils" @@ -12,14 +13,42 @@ unless defined? BASE_DIR BASE_DIR = Pathname.new(__FILE__).dirname PUBLIC_DIR = BASE_DIR + "public" UPLOAD_DIR = BASE_DIR + "upload" +end - Positions = Hash.new +module Plemp + + def self.create + Plemp::Models.create_schema + end + +end + +module Plemp::Models + + class Draggable < Base + end + + class BasicFields < V 1.0 + def self.up + create_table Draggable.table_name do |d| + d.string :file + d.integer :left, :top, :z_index + # This gives us created_at and updated_at + d.timestamps + end + end + + def self.down + drop_table Draggable.table_name + end + end end module Plemp::Controllers class Index def get + @draggables = Draggable.all render :main end end @@ -38,11 +67,13 @@ module Plemp::Controllers end class SaveposXXX - def post(id, top, left) + def post(file, top, left) [top, left].each { |pos| pos.gsub!(/px$/, '') } - $stderr.puts("Got: id: #{id} -> top: #{top}, left: #{left}") - Positions[id] = [top, left] - $stderr.puts Positions.inspect if $DEBUG + $stderr.puts("Got: file id: #{file} -> top: #{top}, left: #{left}") + drag = Draggable.find_by_file(file) + drag.top = top + drag.left = left + drag.save "" end end @@ -50,10 +81,13 @@ module Plemp::Controllers class Upload def post orig_ext = File.extname(@input.file[:filename]).downcase - new_file = UPLOAD_DIR + Time.now.strftime("%Y%m%d%H%M%S#{orig_ext}") + file_base = Time.now.strftime("%Y%m%d%H%M%S#{orig_ext}") + new_file = UPLOAD_DIR + file_base new_file.open("w") do |f| f.write(@input.file[:tempfile].read) end + Draggable.create(:file => file_base, + :left => 350, :top => 200, :z_index => 0) redirect Index end end @@ -71,10 +105,10 @@ module Plemp::Views ['prototype', 'scriptaculous', 'dragreg'].each do |js| script :src => R(StaticXX, "public", "#{js}.js"), :type => "text/javascript" - script :type => "text/javascript" do - "BaseUrl = \"#{URL()}\";" - end end + script :type => "text/javascript" do + "BaseUrl = \"#{URL()}\";" + end end body do self << yield @@ -86,57 +120,47 @@ module Plemp::Views h1 "Plemp!" form :action => R(Upload), :method => "post", :enctype => "multipart/form-data" do - p do input :name => "file", :id => "file", :type => "file" input :type => "submit", :value => "Upload!" - end end div.draggables! do - UPLOAD_DIR.entries.select { |f| (UPLOAD_DIR + f).file? }.each do |f| - next if f.to_s =~ /^\./ - file = UPLOAD_DIR + f - id = file.basename.to_s - if Positions.has_key? id - top, left = Positions[id] - else - top, left = ["#{rand(300)}", " #{80 + rand(700)}"] - Positions[id] = [top, left] - end + @draggables.each do |d| + file = UPLOAD_DIR + d.file file_type = `file --brief --mime-type #{file}`.chomp mime_type = MIME::Types[file_type].first if mime_type.nil? mime_type = MIME::Type.new(file_type) end - default_style = "left:#{left}px;top:#{top}px;z-index:0;display:none" + default_style = "left:#{d.left}px;top:#{d.top}px;z-index:0;display:none" case mime_type.media_type when "image" - img.draggable :id => id, :style => default_style, + img.draggable :id => d.file, :style => default_style, :src => R(StaticXX, "upload", file.basename), :alt => file.basename when "video" # HTML5 is not supported by Markaby! self << \ - " \n" when "audio" # HTML5 is not supported by Markaby! self << - " \n" when "text" - div.draggable :id => id, :style => default_style do + div.draggable :id => d.file, :style => default_style do CodeRay.scan_file(file).div end else - span.draggable :id => id, :style => default_style do - em "#{id}: Unsupported file type!" + span.draggable :id => d.file, :style => default_style do + em "#{d.file}: Unsupported file type!" end end - script(:type => "text/javascript") { "setup_draggable('#{id}')" } + script(:type => "text/javascript") { "setup_draggable('#{d.file}')" } end end end