Compare commits

...

4 commits

Author SHA1 Message Date
Connor Turland e22c3f33e9 first trial of linked data map response 2015-01-24 16:37:40 -05:00
Connor Turland 1a4a2df6c6 remove having to be authed to see metacode json 2015-01-24 14:50:53 -05:00
Connor Turland 3d5ed63534 expose unique metacode urls 2015-01-24 14:34:44 -05:00
Connor Turland f463140931 link to download json for map placed onto map interface 2015-01-24 12:43:35 -05:00
8 changed files with 130 additions and 12 deletions

View file

@ -28,6 +28,8 @@ Metamaps.JIT = {
$(".takeScreenshot").click(Metamaps.Map.exportImage);
$('.downloadMap').click(Metamaps.Map.downloadIt);
self.topicDescImage = new Image();
self.topicDescImage.src = '/assets/topic_description_signifier.png';

View file

@ -1,5 +1,36 @@
var labelType, useGradients, nativeTextSupport, animate;
window.downloadFile = function(sUrl, filename) {
//If in Chrome or Safari - download via virtual link click
if (window.downloadFile.isChrome || window.downloadFile.isSafari) {
//Creating new link node.
var link = document.createElement('a');
link.href = sUrl;
if (link.download !== undefined){
//Set HTML5 download attribute. This will prevent file from opening if supported.
link.download = filename;
}
//Dispatching click event.
if (document.createEvent) {
var e = document.createEvent('MouseEvents');
e.initEvent('click' ,true ,true);
link.dispatchEvent(e);
return true;
}
}
// Force file download (whether supported by server).
var query = '?download';
window.open(sUrl + query);
}
window.downloadFile.isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
window.downloadFile.isSafari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;
(function () {
var ua = navigator.userAgent,
iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i),
@ -4607,6 +4638,26 @@ Metamaps.Map = {
console.log('failed to save map screenshot');
}
});
},
downloadIt: function() {
var map = Metamaps.Active.Map;
var mapName = map.get("name").split(" ").join([separator = '-']);
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
today = mm+'/'+dd+'/'+yyyy;
var href = "/maps/" + map.id + "/contains.json";
var filename = "metamap-" + map.id + "-" + mapName + "-" + today + ".json"; // Set the file name.
window.downloadFile(href, filename);
}
};

View file

@ -915,6 +915,15 @@
z-index: 4;
}
.downloadMap {
margin-bottom:5px;
border-radius: 2px;
color: #D5D5D5;
text-align: center;
padding-top: 6px;
height: 26px;
}
.takeScreenshot {
margin-bottom: 5px;
border-radius: 2px;
@ -938,7 +947,7 @@
background-position: -32px 0;
}
.zoomExtents:hover .tooltips, .zoomIn:hover .tooltips, .zoomOut:hover .tooltips, .takeScreenshot:hover .tooltips, .sidebarCollaborateIcon:hover .tooltipsUnder,
.downloadMap:hover .tooltips, .zoomExtents:hover .tooltips, .zoomIn:hover .tooltips, .zoomOut:hover .tooltips, .takeScreenshot:hover .tooltips, .sidebarCollaborateIcon:hover .tooltipsUnder,
.sidebarFilterIcon:hover .tooltipsUnder, .sidebarForkIcon:hover .tooltipsUnder, .addMap:hover .tooltipsUnder, .authenticated .sidebarAccountIcon:hover .tooltipsUnder,
.mapInfoIcon:hover .tooltipsAbove, .openCheatsheet:hover .tooltipsAbove {
display: block;
@ -1033,7 +1042,7 @@
margin-top: 40px;
}
.zoomExtents div::after, .zoomIn div::after, .zoomOut div::after, .takeScreenshot div:after {
.downloadMap div::after, .zoomExtents div::after, .zoomIn div::after, .zoomOut div::after, .takeScreenshot div:after {
content: '';
position: absolute;
top: 57%;

View file

@ -1,4 +1,5 @@
class MapsController < ApplicationController
include MapsHelper
before_filter :require_user, only: [:create, :update, :screenshot, :destroy]
@ -123,6 +124,21 @@ class MapsController < ApplicationController
end
end
# GET maps/:id/ld
def ld
@current = current_user
@map = Map.find(params[:id]).authorize_to_show(@current)
if not @map
redirect_to root_url, notice: "Access denied. That map is private." and return
end
respond_to do |format|
format.json { render json: linkeddata(@map) }
end
end
# POST maps
def create

View file

@ -1,6 +1,6 @@
class MetacodesController < ApplicationController
before_filter :require_admin, except: [:index]
before_filter :require_admin, except: [:index, :show]
# GET /metacodes
# GET /metacodes.json
@ -23,14 +23,14 @@ class MetacodesController < ApplicationController
### SHOW IS CURRENTLY DISABLED
# GET /metacodes/1
# GET /metacodes/1.json
# def show
# @metacode = Metacode.find(params[:id])
#
# respond_to do |format|
# format.html # show.html.erb
# format.json { render json: @metacode }
# end
# end
def show
@metacode = Metacode.find(params[:id])
respond_to do |format|
#format.html # show.html.erb
format.json { render json: @metacode }
end
end
# GET /metacodes/new
# GET /metacodes/new.json

View file

@ -33,4 +33,39 @@ module MapsHelper
return temp
end
def linkeddata(map)
@alltopics = map.topics.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
js = Hash.new()
js['@context'] = { "@vocab" => "http://schema.org/", "mm" => "http://ns.metamaps.cc/", "mmc" => "http://metamaps.cc/metacodes/" }
js['@id'] = "http://metamaps.cc/maps/" + map.id.to_s
js['@type'] = [ "CreativeWork", "mm:Metamap" ]
js['name'] = map.name
js['description'] = map.desc
graph = []
@alltopics.each do |t|
topic = Hash.new()
topic['@id'] = 'http://metamaps.cc/topics/' + t.id.to_s
topic['@type'] = [
'mmc:' + t.metacode_id.to_s
]
topic['name'] = t.name
t.synapses2.each do |s|
topic['http://metamaps.cc/synapses/' + s.id.to_s] = [ 'http://metamaps.cc/topics/' + s.node1_id.to_s ]
end
graph.push(topic)
end
js['@graph'] = graph
return js
end
end

View file

@ -1,4 +1,5 @@
<div class="mapControls mapElement">
<div href="/test/" class="downloadMap mapControl"><div class="tooltips">Download Map JSON</div>DL</div>
<div class="takeScreenshot mapControl"><div class="tooltips">Capture Screenshot</div></div>
<div class="zoomExtents mapControl"><div class="tooltips">Center View</div></div>
<div class="zoomIn mapControl"><div class="tooltips">Zoom In</div></div>

View file

@ -11,7 +11,7 @@ Metamaps::Application.routes.draw do
resources :mappings, except: [:index, :new, :edit]
resources :metacode_sets, :except => [:show]
resources :metacodes, :except => [:show, :destroy]
resources :metacodes, :except => [:destroy]
resources :synapses, except: [:index, :new, :edit]
resources :topics, except: [:index, :new, :edit] do
get :autocomplete_topic, :on => :collection
@ -26,6 +26,10 @@ Metamaps::Application.routes.draw do
match 'explore/mapper/:id', to: 'maps#index', via: :get, as: :usermaps
resources :maps, except: [:new, :edit]
match 'maps/:id/contains', to: 'maps#contains', via: :get, as: :contains
# for linked data structure
match 'maps/:id/ld', to: 'maps#ld', via: :get, as: :ld
match 'maps/:id/upload_screenshot', to: 'maps#screenshot', via: :post, as: :screenshot
devise_for :users, controllers: { registrations: 'users/registrations', passwords: 'users/passwords', sessions: 'devise/sessions' }, :skip => [:sessions]