diff --git a/app/assets/fonts/entypo.eot b/app/assets/fonts/entypo.eot new file mode 100644 index 000000000..56d104e98 Binary files /dev/null and b/app/assets/fonts/entypo.eot differ diff --git a/app/assets/fonts/entypo.svg b/app/assets/fonts/entypo.svg new file mode 100644 index 000000000..01ff749dc --- /dev/null +++ b/app/assets/fonts/entypo.svg @@ -0,0 +1,580 @@ + + + + +This is a custom SVG font generated by IcoMoon. +1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/assets/fonts/entypo.ttf b/app/assets/fonts/entypo.ttf new file mode 100644 index 000000000..0a114e0a6 Binary files /dev/null and b/app/assets/fonts/entypo.ttf differ diff --git a/app/assets/fonts/entypo.woff b/app/assets/fonts/entypo.woff new file mode 100644 index 000000000..57cf5b47c Binary files /dev/null and b/app/assets/fonts/entypo.woff differ diff --git a/app/assets/images/modulestore/app-icon.jpg b/app/assets/images/modulestore/app-icon.jpg new file mode 100644 index 000000000..711f04811 Binary files /dev/null and b/app/assets/images/modulestore/app-icon.jpg differ diff --git a/app/assets/images/modulestore/app.jpg b/app/assets/images/modulestore/app.jpg new file mode 100644 index 000000000..667958825 Binary files /dev/null and b/app/assets/images/modulestore/app.jpg differ diff --git a/app/assets/images/modulestore/carousel_feature.png b/app/assets/images/modulestore/carousel_feature.png new file mode 100644 index 000000000..ee38685fb Binary files /dev/null and b/app/assets/images/modulestore/carousel_feature.png differ diff --git a/app/assets/images/modulestore/deault-app-icon.jpg b/app/assets/images/modulestore/deault-app-icon.jpg new file mode 100644 index 000000000..3bbc5a677 Binary files /dev/null and b/app/assets/images/modulestore/deault-app-icon.jpg differ diff --git a/app/assets/images/modulestore/dropbox.jpg b/app/assets/images/modulestore/dropbox.jpg new file mode 100644 index 000000000..e48bf90f6 Binary files /dev/null and b/app/assets/images/modulestore/dropbox.jpg differ diff --git a/app/assets/images/modulestore/h1_bg.png b/app/assets/images/modulestore/h1_bg.png new file mode 100644 index 000000000..c413594c6 Binary files /dev/null and b/app/assets/images/modulestore/h1_bg.png differ diff --git a/app/assets/images/modulestore/left_nav.png b/app/assets/images/modulestore/left_nav.png new file mode 100644 index 000000000..e312ed92a Binary files /dev/null and b/app/assets/images/modulestore/left_nav.png differ diff --git a/app/assets/images/modulestore/right_nav.png b/app/assets/images/modulestore/right_nav.png new file mode 100644 index 000000000..df81ea5dc Binary files /dev/null and b/app/assets/images/modulestore/right_nav.png differ diff --git a/app/assets/images/modulestore/screen-capture.jpg b/app/assets/images/modulestore/screen-capture.jpg new file mode 100644 index 000000000..52475c046 Binary files /dev/null and b/app/assets/images/modulestore/screen-capture.jpg differ diff --git a/app/assets/images/modulestore/screenshot1.jpg b/app/assets/images/modulestore/screenshot1.jpg new file mode 100644 index 000000000..fc562e958 Binary files /dev/null and b/app/assets/images/modulestore/screenshot1.jpg differ diff --git a/app/assets/images/modulestore/screenshot2.jpg b/app/assets/images/modulestore/screenshot2.jpg new file mode 100644 index 000000000..c98375830 Binary files /dev/null and b/app/assets/images/modulestore/screenshot2.jpg differ diff --git a/app/assets/images/modulestore/screenshot3.jpg b/app/assets/images/modulestore/screenshot3.jpg new file mode 100644 index 000000000..b0a9c6426 Binary files /dev/null and b/app/assets/images/modulestore/screenshot3.jpg differ diff --git a/app/assets/images/modulestore/screenshot4.jpg b/app/assets/images/modulestore/screenshot4.jpg new file mode 100644 index 000000000..fd11b7776 Binary files /dev/null and b/app/assets/images/modulestore/screenshot4.jpg differ diff --git a/app/assets/images/modulestore/screenshot5.jpg b/app/assets/images/modulestore/screenshot5.jpg new file mode 100644 index 000000000..5231eedae Binary files /dev/null and b/app/assets/images/modulestore/screenshot5.jpg differ diff --git a/app/assets/images/modulestore/slide01.jpg b/app/assets/images/modulestore/slide01.jpg new file mode 100644 index 000000000..eb9f8eb9f Binary files /dev/null and b/app/assets/images/modulestore/slide01.jpg differ diff --git a/app/assets/images/templatestore/h1_bg.png b/app/assets/images/templatestore/h1_bg.png new file mode 100644 index 000000000..b8f1f01ba Binary files /dev/null and b/app/assets/images/templatestore/h1_bg.png differ diff --git a/app/assets/images/templatestore/screenshot1.jpg b/app/assets/images/templatestore/screenshot1.jpg new file mode 100644 index 000000000..fc562e958 Binary files /dev/null and b/app/assets/images/templatestore/screenshot1.jpg differ diff --git a/app/assets/images/templatestore/screenshot2.jpg b/app/assets/images/templatestore/screenshot2.jpg new file mode 100644 index 000000000..c98375830 Binary files /dev/null and b/app/assets/images/templatestore/screenshot2.jpg differ diff --git a/app/assets/images/templatestore/screenshot3.jpg b/app/assets/images/templatestore/screenshot3.jpg new file mode 100644 index 000000000..b0a9c6426 Binary files /dev/null and b/app/assets/images/templatestore/screenshot3.jpg differ diff --git a/app/assets/images/templatestore/screenshot4.jpg b/app/assets/images/templatestore/screenshot4.jpg new file mode 100644 index 000000000..fd11b7776 Binary files /dev/null and b/app/assets/images/templatestore/screenshot4.jpg differ diff --git a/app/assets/images/templatestore/screenshot5.jpg b/app/assets/images/templatestore/screenshot5.jpg new file mode 100644 index 000000000..5231eedae Binary files /dev/null and b/app/assets/images/templatestore/screenshot5.jpg differ diff --git a/app/assets/images/templatestore/template-icon.jpg b/app/assets/images/templatestore/template-icon.jpg new file mode 100644 index 000000000..7dca3b023 Binary files /dev/null and b/app/assets/images/templatestore/template-icon.jpg differ diff --git a/app/assets/images/templatestore/template.jpg b/app/assets/images/templatestore/template.jpg new file mode 100644 index 000000000..76fb1064e Binary files /dev/null and b/app/assets/images/templatestore/template.jpg differ diff --git a/app/assets/javascripts/desktop/journal_pages.js.erb b/app/assets/javascripts/desktop/journal_pages.js.erb index 9b7c0a03a..4af5715ce 100644 --- a/app/assets/javascripts/desktop/journal_pages.js.erb +++ b/app/assets/javascripts/desktop/journal_pages.js.erb @@ -57,6 +57,10 @@ orbitDesktop.prototype.initializeJournalPapers = function(target,url,cache){ // success : function(data){ var prev_data = $("div[container=true]").html(); $("div[container=true]").html(data); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) $(".bt-cancel").click(function(){ $("div[container=true]").html(prev_data); }) @@ -230,15 +234,8 @@ orbitDesktop.prototype.initializeJournalPapers = function(target,url,cache){ // } bindHandlers(); } - this.initializeJournalPapers.coAuthorformCallback = function(data){ - if(data.success){ - o.notify(data.msg,"success"); - o.sub_menu_item($("div[content-type=menu] a").eq(0)); - }else{ - o.notify(data.msg,"alert"); - } - } - this.initializeJournalPapers.coauthor = function(){ // to open add pages in journal papers page + + this.initializeJournalPapers.journal = function(){ // to open add pages in journal papers page var bindHandlers = function(){ // to bind handlers for add page o.simple_drop_down(); @@ -250,5 +247,108 @@ orbitDesktop.prototype.initializeJournalPapers = function(target,url,cache){ // bindHandlers(); } + this.initializeJournalPapers.coAuthorformCallback = function(data){ + if(data.success){ + o.notify(data.msg,"success"); + o.sub_menu_item($("div[content-type=menu] a").eq(0)); + }else{ + o.notify(data.msg,"alert"); + } + } + this.initializeJournalPapers.coauthor = function(){ // to open add pages in coauthor page + var bindHandlers = function(){ // to bind handlers for add page + o.simple_drop_down(); - }; + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) + $("a.bt-edit").click(function(){ + $.ajax({ + url : $(this).attr("href"), + type : "get", + success : function(data){ + var prev_data = $("div[container=true]").html(); + $("div[container=true]").html(data); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) + $(".bt-cancel").click(function(){ + $("div[container=true]").html(prev_data); + }) + } + }) + return false; + }) + $("div[container=true]").unbind(".delete").on("click.delete","a.bt-delete",function(){ + var delurl = $(this).attr("href"); + var parent = $(this).parent().parent(); + o.confirm({ + buttons : ["Yes","No"], + highlighted : 2, + message : "Are you sure, you want to delete this author?" + },function(value){ + if(value){ + $.ajax({ + url : delurl, + type : "DELETE", + success : function(data){ + if(data.success){ + parent.hide("slide",function(){parent.remove();}); + o.notify(data.msg,"success"); + } + } + }) + } + }) + return false; + }) + $("div[container=true]").unbind(".new_type").on("click.new_type","a.bt-new-type",function(){ + $.ajax({ + url : $(this).attr("href"), + type : "get", + success : function(data){ + var prev_data = $("div[container=true]").html(); + $("div[container=true]").html(data); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) + $(".bt-cancel").click(function(){ + $("div[container=true]").html(prev_data); + }) + } + }) + return false; + }) + $("div[container=true]").unbind(".bt-co-author").on("click.bt-co-author","a.bt-co-author",function(){ + $.ajax({ + url : $(this).attr("href"), + type : "get", + success : function(data){ + var prev_data = $("div[container=true]").html(); + $("div[container=true]").html(data); + o.tinyscrollbar_ext({ + main: '.tinycanvas', + fill: '.s_grid_con' + }) + $(".bt-cancel").click(function(){ + $("div[container=true]").html(prev_data); + }) + } + }) + return false; + }) + } + bindHandlers(); + } + this.initializeJournalPapers.coauthorRelationForm = function(data){ + if(data.success){ + o.notify(data.msg,"success"); + $("#co_author_relation_table tbody").prepend(data.newvalue); + }else{ + o.notify(data.msg,"alert"); + } + } +}; diff --git a/app/assets/javascripts/lib/jquery.cycle.all.latest.js b/app/assets/javascripts/lib/jquery.cycle.all.latest.js new file mode 100644 index 000000000..75d7ab98f --- /dev/null +++ b/app/assets/javascripts/lib/jquery.cycle.all.latest.js @@ -0,0 +1,1331 @@ +/*! + * jQuery Cycle Plugin (with Transition Definitions) + * Examples and documentation at: http://jquery.malsup.com/cycle/ + * Copyright (c) 2007-2010 M. Alsup + * Version: 2.88 (08-JUN-2010) + * Dual licensed under the MIT and GPL licenses. + * http://jquery.malsup.com/license.html + * Requires: jQuery v1.2.6 or later + */ +;(function($) { + +var ver = '2.88'; + +// if $.support is not defined (pre jQuery 1.3) add what I need +if ($.support == undefined) { + $.support = { + opacity: !($.browser.msie) + }; +} + +function debug(s) { + if ($.fn.cycle.debug) + log(s); +} +function log() { + if (window.console && window.console.log) + window.console.log('[cycle] ' + Array.prototype.join.call(arguments,' ')); +}; + +// the options arg can be... +// a number - indicates an immediate transition should occur to the given slide index +// a string - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc) +// an object - properties to control the slideshow +// +// the arg2 arg can be... +// the name of an fx (only used in conjunction with a numeric value for 'options') +// the value true (only used in first arg == 'resume') and indicates +// that the resume should occur immediately (not wait for next timeout) + +$.fn.cycle = function(options, arg2) { + var o = { s: this.selector, c: this.context }; + + // in 1.3+ we can fix mistakes with the ready state + if (this.length === 0 && options != 'stop') { + if (!$.isReady && o.s) { + log('DOM not ready, queuing slideshow'); + $(function() { + $(o.s,o.c).cycle(options,arg2); + }); + return this; + } + // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready() + log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)')); + return this; + } + + // iterate the matched nodeset + return this.each(function() { + var opts = handleArguments(this, options, arg2); + if (opts === false) + return; + + opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink; + + // stop existing slideshow for this container (if there is one) + if (this.cycleTimeout) + clearTimeout(this.cycleTimeout); + this.cycleTimeout = this.cyclePause = 0; + + var $cont = $(this); + var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children(); + var els = $slides.get(); + if (els.length < 2) { + log('terminating; too few slides: ' + els.length); + return; + } + + var opts2 = buildOptions($cont, $slides, els, opts, o); + if (opts2 === false) + return; + + var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.rev); + + // if it's an auto slideshow, kick it off + if (startTime) { + startTime += (opts2.delay || 0); + if (startTime < 10) + startTime = 10; + debug('first timeout: ' + startTime); + this.cycleTimeout = setTimeout(function(){go(els,opts2,0,(!opts2.rev && !opts.backwards))}, startTime); + } + }); +}; + +// process the args that were passed to the plugin fn +function handleArguments(cont, options, arg2) { + if (cont.cycleStop == undefined) + cont.cycleStop = 0; + if (options === undefined || options === null) + options = {}; + if (options.constructor == String) { + switch(options) { + case 'destroy': + case 'stop': + var opts = $(cont).data('cycle.opts'); + if (!opts) + return false; + cont.cycleStop++; // callbacks look for change + if (cont.cycleTimeout) + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + $(cont).removeData('cycle.opts'); + if (options == 'destroy') + destroy(opts); + return false; + case 'toggle': + cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1; + checkInstantResume(cont.cyclePause, arg2, cont); + return false; + case 'pause': + cont.cyclePause = 1; + return false; + case 'resume': + cont.cyclePause = 0; + checkInstantResume(false, arg2, cont); + return false; + case 'prev': + case 'next': + var opts = $(cont).data('cycle.opts'); + if (!opts) { + log('options not found, "prev/next" ignored'); + return false; + } + $.fn.cycle[options](opts); + return false; + default: + options = { fx: options }; + }; + return options; + } + else if (options.constructor == Number) { + // go to the requested slide + var num = options; + options = $(cont).data('cycle.opts'); + if (!options) { + log('options not found, can not advance slide'); + return false; + } + if (num < 0 || num >= options.elements.length) { + log('invalid slide index: ' + num); + return false; + } + options.nextSlide = num; + if (cont.cycleTimeout) { + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + } + if (typeof arg2 == 'string') + options.oneTimeFx = arg2; + go(options.elements, options, 1, num >= options.currSlide); + return false; + } + return options; + + function checkInstantResume(isPaused, arg2, cont) { + if (!isPaused && arg2 === true) { // resume now! + var options = $(cont).data('cycle.opts'); + if (!options) { + log('options not found, can not resume'); + return false; + } + if (cont.cycleTimeout) { + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + } + go(options.elements, options, 1, (!opts.rev && !opts.backwards)); + } + } +}; + +function removeFilter(el, opts) { + if (!$.support.opacity && opts.cleartype && el.style.filter) { + try { el.style.removeAttribute('filter'); } + catch(smother) {} // handle old opera versions + } +}; + +// unbind event handlers +function destroy(opts) { + if (opts.next) + $(opts.next).unbind(opts.prevNextEvent); + if (opts.prev) + $(opts.prev).unbind(opts.prevNextEvent); + + if (opts.pager || opts.pagerAnchorBuilder) + $.each(opts.pagerAnchors || [], function() { + this.unbind().remove(); + }); + opts.pagerAnchors = null; + if (opts.destroy) // callback + opts.destroy(opts); +}; + +// one-time initialization +function buildOptions($cont, $slides, els, options, o) { + // support metadata plugin (v1.0 and v2.0) + var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {}); + if (opts.autostop) + opts.countdown = opts.autostopCount || els.length; + + var cont = $cont[0]; + $cont.data('cycle.opts', opts); + opts.$cont = $cont; + opts.stopCount = cont.cycleStop; + opts.elements = els; + opts.before = opts.before ? [opts.before] : []; + opts.after = opts.after ? [opts.after] : []; + opts.after.unshift(function(){ opts.busy=0; }); + + // push some after callbacks + if (!$.support.opacity && opts.cleartype) + opts.after.push(function() { removeFilter(this, opts); }); + if (opts.continuous) + opts.after.push(function() { go(els,opts,0,(!opts.rev && !opts.backwards)); }); + + saveOriginalOpts(opts); + + // clearType corrections + if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) + clearTypeFix($slides); + + // container requires non-static position so that slides can be position within + if ($cont.css('position') == 'static') + $cont.css('position', 'relative'); + if (opts.width) + $cont.width(opts.width); + if (opts.height && opts.height != 'auto') + $cont.height(opts.height); + + if (opts.startingSlide) + opts.startingSlide = parseInt(opts.startingSlide); + else if (opts.backwards) + opts.startingSlide = els.length - 1; + + // if random, mix up the slide array + if (opts.random) { + opts.randomMap = []; + for (var i = 0; i < els.length; i++) + opts.randomMap.push(i); + opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;}); + opts.randomIndex = 1; + opts.startingSlide = opts.randomMap[1]; + } + else if (opts.startingSlide >= els.length) + opts.startingSlide = 0; // catch bogus input + opts.currSlide = opts.startingSlide || 0; + var first = opts.startingSlide; + + // set position and zIndex on all the slides + $slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) { + var z; + if (opts.backwards) + z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i; + else + z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i; + $(this).css('z-index', z) + }); + + // make sure first slide is visible + $(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case + removeFilter(els[first], opts); + + // stretch slides + if (opts.fit && opts.width) + $slides.width(opts.width); + if (opts.fit && opts.height && opts.height != 'auto') + $slides.height(opts.height); + + // stretch container + var reshape = opts.containerResize && !$cont.innerHeight(); + if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9 + var maxw = 0, maxh = 0; + for(var j=0; j < els.length; j++) { + var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight(); + if (!w) w = e.offsetWidth || e.width || $e.attr('width') + if (!h) h = e.offsetHeight || e.height || $e.attr('height'); + maxw = w > maxw ? w : maxw; + maxh = h > maxh ? h : maxh; + } + if (maxw > 0 && maxh > 0) + $cont.css({width:maxw+'px',height:maxh+'px'}); + } + + if (opts.pause) + $cont.hover(function(){this.cyclePause++;},function(){this.cyclePause--;}); + + if (supportMultiTransitions(opts) === false) + return false; + + // apparently a lot of people use image slideshows without height/width attributes on the images. + // Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that. + var requeue = false; + options.requeueAttempts = options.requeueAttempts || 0; + $slides.each(function() { + // try to get height/width of each slide + var $el = $(this); + this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0); + this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0); + + if ( $el.is('img') ) { + // sigh.. sniffing, hacking, shrugging... this crappy hack tries to account for what browsers do when + // an image is being downloaded and the markup did not include sizing info (height/width attributes); + // there seems to be some "default" sizes used in this situation + var loadingIE = ($.browser.msie && this.cycleW == 28 && this.cycleH == 30 && !this.complete); + var loadingFF = ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete); + var loadingOp = ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete); + var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete); + // don't requeue for images that are still loading but have a valid size + if (loadingIE || loadingFF || loadingOp || loadingOther) { + if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever + log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH); + setTimeout(function() {$(o.s,o.c).cycle(options)}, opts.requeueTimeout); + requeue = true; + return false; // break each loop + } + else { + log('could not determine size of image: '+this.src, this.cycleW, this.cycleH); + } + } + } + return true; + }); + + if (requeue) + return false; + + opts.cssBefore = opts.cssBefore || {}; + opts.animIn = opts.animIn || {}; + opts.animOut = opts.animOut || {}; + + $slides.not(':eq('+first+')').css(opts.cssBefore); + if (opts.cssFirst) + $($slides[first]).css(opts.cssFirst); + + if (opts.timeout) { + opts.timeout = parseInt(opts.timeout); + // ensure that timeout and speed settings are sane + if (opts.speed.constructor == String) + opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed); + if (!opts.sync) + opts.speed = opts.speed / 2; + + var buffer = opts.fx == 'shuffle' ? 500 : 250; + while((opts.timeout - opts.speed) < buffer) // sanitize timeout + opts.timeout += opts.speed; + } + if (opts.easing) + opts.easeIn = opts.easeOut = opts.easing; + if (!opts.speedIn) + opts.speedIn = opts.speed; + if (!opts.speedOut) + opts.speedOut = opts.speed; + + opts.slideCount = els.length; + opts.currSlide = opts.lastSlide = first; + if (opts.random) { + if (++opts.randomIndex == els.length) + opts.randomIndex = 0; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else if (opts.backwards) + opts.nextSlide = opts.startingSlide == 0 ? (els.length-1) : opts.startingSlide-1; + else + opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1; + + // run transition init fn + if (!opts.multiFx) { + var init = $.fn.cycle.transitions[opts.fx]; + if ($.isFunction(init)) + init($cont, $slides, opts); + else if (opts.fx != 'custom' && !opts.multiFx) { + log('unknown transition: ' + opts.fx,'; slideshow terminating'); + return false; + } + } + + // fire artificial events + var e0 = $slides[first]; + if (opts.before.length) + opts.before[0].apply(e0, [e0, e0, opts, true]); + if (opts.after.length > 1) + opts.after[1].apply(e0, [e0, e0, opts, true]); + + if (opts.next) + $(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?-1:1)}); + if (opts.prev) + $(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?1:-1)}); + if (opts.pager || opts.pagerAnchorBuilder) + buildPager(els,opts); + + exposeAddSlide(opts, els); + + return opts; +}; + +// save off original opts so we can restore after clearing state +function saveOriginalOpts(opts) { + opts.original = { before: [], after: [] }; + opts.original.cssBefore = $.extend({}, opts.cssBefore); + opts.original.cssAfter = $.extend({}, opts.cssAfter); + opts.original.animIn = $.extend({}, opts.animIn); + opts.original.animOut = $.extend({}, opts.animOut); + $.each(opts.before, function() { opts.original.before.push(this); }); + $.each(opts.after, function() { opts.original.after.push(this); }); +}; + +function supportMultiTransitions(opts) { + var i, tx, txs = $.fn.cycle.transitions; + // look for multiple effects + if (opts.fx.indexOf(',') > 0) { + opts.multiFx = true; + opts.fxs = opts.fx.replace(/\s*/g,'').split(','); + // discard any bogus effect names + for (i=0; i < opts.fxs.length; i++) { + var fx = opts.fxs[i]; + tx = txs[fx]; + if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) { + log('discarding unknown transition: ',fx); + opts.fxs.splice(i,1); + i--; + } + } + // if we have an empty list then we threw everything away! + if (!opts.fxs.length) { + log('No valid transitions named; slideshow terminating.'); + return false; + } + } + else if (opts.fx == 'all') { // auto-gen the list of transitions + opts.multiFx = true; + opts.fxs = []; + for (p in txs) { + tx = txs[p]; + if (txs.hasOwnProperty(p) && $.isFunction(tx)) + opts.fxs.push(p); + } + } + if (opts.multiFx && opts.randomizeEffects) { + // munge the fxs array to make effect selection random + var r1 = Math.floor(Math.random() * 20) + 30; + for (i = 0; i < r1; i++) { + var r2 = Math.floor(Math.random() * opts.fxs.length); + opts.fxs.push(opts.fxs.splice(r2,1)[0]); + } + debug('randomized fx sequence: ',opts.fxs); + } + return true; +}; + +// provide a mechanism for adding slides after the slideshow has started +function exposeAddSlide(opts, els) { + opts.addSlide = function(newSlide, prepend) { + var $s = $(newSlide), s = $s[0]; + if (!opts.autostopCount) + opts.countdown++; + els[prepend?'unshift':'push'](s); + if (opts.els) + opts.els[prepend?'unshift':'push'](s); // shuffle needs this + opts.slideCount = els.length; + + $s.css('position','absolute'); + $s[prepend?'prependTo':'appendTo'](opts.$cont); + + if (prepend) { + opts.currSlide++; + opts.nextSlide++; + } + + if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) + clearTypeFix($s); + + if (opts.fit && opts.width) + $s.width(opts.width); + if (opts.fit && opts.height && opts.height != 'auto') + $slides.height(opts.height); + s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height(); + s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width(); + + $s.css(opts.cssBefore); + + if (opts.pager || opts.pagerAnchorBuilder) + $.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts); + + if ($.isFunction(opts.onAddSlide)) + opts.onAddSlide($s); + else + $s.hide(); // default behavior + }; +} + +// reset internal state; we do this on every pass in order to support multiple effects +$.fn.cycle.resetState = function(opts, fx) { + fx = fx || opts.fx; + opts.before = []; opts.after = []; + opts.cssBefore = $.extend({}, opts.original.cssBefore); + opts.cssAfter = $.extend({}, opts.original.cssAfter); + opts.animIn = $.extend({}, opts.original.animIn); + opts.animOut = $.extend({}, opts.original.animOut); + opts.fxFn = null; + $.each(opts.original.before, function() { opts.before.push(this); }); + $.each(opts.original.after, function() { opts.after.push(this); }); + + // re-init + var init = $.fn.cycle.transitions[fx]; + if ($.isFunction(init)) + init(opts.$cont, $(opts.elements), opts); +}; + +// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt +function go(els, opts, manual, fwd) { + // opts.busy is true if we're in the middle of an animation + if (manual && opts.busy && opts.manualTrump) { + // let manual transitions requests trump active ones + debug('manualTrump in go(), stopping active transition'); + $(els).stop(true,true); + opts.busy = false; + } + // don't begin another timeout-based transition if there is one active + if (opts.busy) { + debug('transition active, ignoring new tx request'); + return; + } + + var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide]; + + // stop cycling if we have an outstanding stop request + if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual) + return; + + // check to see if we should stop cycling based on autostop options + if (!manual && !p.cyclePause && !opts.bounce && + ((opts.autostop && (--opts.countdown <= 0)) || + (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) { + if (opts.end) + opts.end(opts); + return; + } + + // if slideshow is paused, only transition on a manual trigger + var changed = false; + if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) { + changed = true; + var fx = opts.fx; + // keep trying to get the slide size if we don't have it yet + curr.cycleH = curr.cycleH || $(curr).height(); + curr.cycleW = curr.cycleW || $(curr).width(); + next.cycleH = next.cycleH || $(next).height(); + next.cycleW = next.cycleW || $(next).width(); + + // support multiple transition types + if (opts.multiFx) { + if (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length) + opts.lastFx = 0; + fx = opts.fxs[opts.lastFx]; + opts.currFx = fx; + } + + // one-time fx overrides apply to: $('div').cycle(3,'zoom'); + if (opts.oneTimeFx) { + fx = opts.oneTimeFx; + opts.oneTimeFx = null; + } + + $.fn.cycle.resetState(opts, fx); + + // run the before callbacks + if (opts.before.length) + $.each(opts.before, function(i,o) { + if (p.cycleStop != opts.stopCount) return; + o.apply(next, [curr, next, opts, fwd]); + }); + + // stage the after callacks + var after = function() { + $.each(opts.after, function(i,o) { + if (p.cycleStop != opts.stopCount) return; + o.apply(next, [curr, next, opts, fwd]); + }); + }; + + debug('tx firing; currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide); + + // get ready to perform the transition + opts.busy = 1; + if (opts.fxFn) // fx function provided? + opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent); + else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ? + $.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent); + else + $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent); + } + + if (changed || opts.nextSlide == opts.currSlide) { + // calculate the next slide + opts.lastSlide = opts.currSlide; + if (opts.random) { + opts.currSlide = opts.nextSlide; + if (++opts.randomIndex == els.length) + opts.randomIndex = 0; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + if (opts.nextSlide == opts.currSlide) + opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1; + } + else if (opts.backwards) { + var roll = (opts.nextSlide - 1) < 0; + if (roll && opts.bounce) { + opts.backwards = !opts.backwards; + opts.nextSlide = 1; + opts.currSlide = 0; + } + else { + opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1; + opts.currSlide = roll ? 0 : opts.nextSlide+1; + } + } + else { // sequence + var roll = (opts.nextSlide + 1) == els.length; + if (roll && opts.bounce) { + opts.backwards = !opts.backwards; + opts.nextSlide = els.length-2; + opts.currSlide = els.length-1; + } + else { + opts.nextSlide = roll ? 0 : opts.nextSlide+1; + opts.currSlide = roll ? els.length-1 : opts.nextSlide-1; + } + } + } + if (changed && opts.pager) + opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass); + + // stage the next transition + var ms = 0; + if (opts.timeout && !opts.continuous) + ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd); + else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic + ms = 10; + if (ms > 0) + p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, (!opts.rev && !opts.backwards)) }, ms); +}; + +// invoked after transition +$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) { + $(pager).each(function() { + $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName); + }); +}; + +// calculate timeout value for current transition +function getTimeout(curr, next, opts, fwd) { + if (opts.timeoutFn) { + // call user provided calc fn + var t = opts.timeoutFn.call(curr,curr,next,opts,fwd); + while ((t - opts.speed) < 250) // sanitize timeout + t += opts.speed; + debug('calculated timeout: ' + t + '; speed: ' + opts.speed); + if (t !== false) + return t; + } + return opts.timeout; +}; + +// expose next/prev function, caller must pass in state +$.fn.cycle.next = function(opts) { advance(opts, opts.rev?-1:1); }; +$.fn.cycle.prev = function(opts) { advance(opts, opts.rev?1:-1);}; + +// advance slide forward or back +function advance(opts, val) { + var els = opts.elements; + var p = opts.$cont[0], timeout = p.cycleTimeout; + if (timeout) { + clearTimeout(timeout); + p.cycleTimeout = 0; + } + if (opts.random && val < 0) { + // move back to the previously display slide + opts.randomIndex--; + if (--opts.randomIndex == -2) + opts.randomIndex = els.length-2; + else if (opts.randomIndex == -1) + opts.randomIndex = els.length-1; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else if (opts.random) { + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else { + opts.nextSlide = opts.currSlide + val; + if (opts.nextSlide < 0) { + if (opts.nowrap) return false; + opts.nextSlide = els.length - 1; + } + else if (opts.nextSlide >= els.length) { + if (opts.nowrap) return false; + opts.nextSlide = 0; + } + } + + var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated + if ($.isFunction(cb)) + cb(val > 0, opts.nextSlide, els[opts.nextSlide]); + go(els, opts, 1, val>=0); + return false; +}; + +function buildPager(els, opts) { + var $p = $(opts.pager); + $.each(els, function(i,o) { + $.fn.cycle.createPagerAnchor(i,o,$p,els,opts); + }); + opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass); +}; + +$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { + var a; + if ($.isFunction(opts.pagerAnchorBuilder)) { + a = opts.pagerAnchorBuilder(i,el); + debug('pagerAnchorBuilder('+i+', el) returned: ' + a); + } + else + a = ''+(i+1)+''; + + if (!a) + return; + var $a = $(a); + // don't reparent if anchor is in the dom + if ($a.parents('body').length === 0) { + var arr = []; + if ($p.length > 1) { + $p.each(function() { + var $clone = $a.clone(true); + $(this).append($clone); + arr.push($clone[0]); + }); + $a = $(arr); + } + else { + $a.appendTo($p); + } + } + + opts.pagerAnchors = opts.pagerAnchors || []; + opts.pagerAnchors.push($a); + $a.bind(opts.pagerEvent, function(e) { + e.preventDefault(); + opts.nextSlide = i; + var p = opts.$cont[0], timeout = p.cycleTimeout; + if (timeout) { + clearTimeout(timeout); + p.cycleTimeout = 0; + } + var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated + if ($.isFunction(cb)) + cb(opts.nextSlide, els[opts.nextSlide]); + go(els,opts,1,opts.currSlide < i); // trigger the trans +// return false; // <== allow bubble + }); + + if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble) + $a.bind('click.cycle', function(){return false;}); // suppress click + + if (opts.pauseOnPagerHover) + $a.hover(function() { opts.$cont[0].cyclePause++; }, function() { opts.$cont[0].cyclePause--; } ); +}; + +// helper fn to calculate the number of slides between the current and the next +$.fn.cycle.hopsFromLast = function(opts, fwd) { + var hops, l = opts.lastSlide, c = opts.currSlide; + if (fwd) + hops = c > l ? c - l : opts.slideCount - l; + else + hops = c < l ? l - c : l + opts.slideCount - c; + return hops; +}; + +// fix clearType problems in ie6 by setting an explicit bg color +// (otherwise text slides look horrible during a fade transition) +function clearTypeFix($slides) { + debug('applying clearType background-color hack'); + function hex(s) { + s = parseInt(s).toString(16); + return s.length < 2 ? '0'+s : s; + }; + function getBg(e) { + for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) { + var v = $.css(e,'background-color'); + if (v.indexOf('rgb') >= 0 ) { + var rgb = v.match(/\d+/g); + return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]); + } + if (v && v != 'transparent') + return v; + } + return '#ffffff'; + }; + $slides.each(function() { $(this).css('background-color', getBg(this)); }); +}; + +// reset common props before the next transition +$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) { + $(opts.elements).not(curr).hide(); + opts.cssBefore.opacity = 1; + opts.cssBefore.display = 'block'; + if (w !== false && next.cycleW > 0) + opts.cssBefore.width = next.cycleW; + if (h !== false && next.cycleH > 0) + opts.cssBefore.height = next.cycleH; + opts.cssAfter = opts.cssAfter || {}; + opts.cssAfter.display = 'none'; + $(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0)); + $(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1)); +}; + +// the actual fn for effecting a transition +$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) { + var $l = $(curr), $n = $(next); + var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut; + $n.css(opts.cssBefore); + if (speedOverride) { + if (typeof speedOverride == 'number') + speedIn = speedOut = speedOverride; + else + speedIn = speedOut = 1; + easeIn = easeOut = null; + } + var fn = function() {$n.animate(opts.animIn, speedIn, easeIn, cb)}; + $l.animate(opts.animOut, speedOut, easeOut, function() { + if (opts.cssAfter) $l.css(opts.cssAfter); + if (!opts.sync) fn(); + }); + if (opts.sync) fn(); +}; + +// transition definitions - only fade is defined here, transition pack defines the rest +$.fn.cycle.transitions = { + fade: function($cont, $slides, opts) { + $slides.not(':eq('+opts.currSlide+')').css('opacity',0); + opts.before.push(function(curr,next,opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.opacity = 0; + }); + opts.animIn = { opacity: 1 }; + opts.animOut = { opacity: 0 }; + opts.cssBefore = { top: 0, left: 0 }; + } +}; + +$.fn.cycle.ver = function() { return ver; }; + +// override these globally if you like (they are all optional) +$.fn.cycle.defaults = { + fx: 'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle') + timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance) + timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag) + continuous: 0, // true to start next transition immediately after current one completes + speed: 1000, // speed of the transition (any valid fx speed value) + speedIn: null, // speed of the 'in' transition + speedOut: null, // speed of the 'out' transition + next: null, // selector for element to use as event trigger for next slide + prev: null, // selector for element to use as event trigger for previous slide +// prevNextClick: null, // @deprecated; please use onPrevNextEvent instead + onPrevNextEvent: null, // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement) + prevNextEvent:'click.cycle',// event which drives the manual transition to the previous or next slide + pager: null, // selector for element to use as pager container + //pagerClick null, // @deprecated; please use onPagerEvent instead + onPagerEvent: null, // callback fn for pager events: function(zeroBasedSlideIndex, slideElement) + pagerEvent: 'click.cycle', // name of event which drives the pager navigation + allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling + pagerAnchorBuilder: null, // callback fn for building anchor links: function(index, DOMelement) + before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag) + after: null, // transition callback (scope set to element that was shown): function(currSlideElement, nextSlideElement, options, forwardFlag) + end: null, // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options) + easing: null, // easing method for both in and out transitions + easeIn: null, // easing for "in" transition + easeOut: null, // easing for "out" transition + shuffle: null, // coords for shuffle animation, ex: { top:15, left: 200 } + animIn: null, // properties that define how the slide animates in + animOut: null, // properties that define how the slide animates out + cssBefore: null, // properties that define the initial state of the slide before transitioning in + cssAfter: null, // properties that defined the state of the slide after transitioning out + fxFn: null, // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag) + height: 'auto', // container height + startingSlide: 0, // zero-based index of the first slide to be displayed + sync: 1, // true if in/out transitions should occur simultaneously + random: 0, // true for random, false for sequence (not applicable to shuffle fx) + fit: 0, // force slides to fit container + containerResize: 1, // resize container to fit largest slide + pause: 0, // true to enable "pause on hover" + pauseOnPagerHover: 0, // true to pause when hovering over pager link + autostop: 0, // true to end slideshow after X transitions (where X == slide count) + autostopCount: 0, // number of transitions (optionally used with autostop to define X) + delay: 0, // additional delay (in ms) for first transition (hint: can be negative) + slideExpr: null, // expression for selecting slides (if something other than all children is required) + cleartype: !$.support.opacity, // true if clearType corrections should be applied (for IE) + cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides) + nowrap: 0, // true to prevent slideshow from wrapping + fastOnEvent: 0, // force fast transitions when triggered manually (via pager or prev/next); value == time in ms + randomizeEffects: 1, // valid when multiple effects are used; true to make the effect sequence random + rev: 0, // causes animations to transition in reverse + manualTrump: true, // causes manual transition to stop an active transition instead of being ignored + requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded + requeueTimeout: 250, // ms delay for requeue + activePagerClass: 'activeSlide', // class name used for the active pager link + updateActivePagerLink: null, // callback fn invoked to update the active pager link (adds/removes activePagerClass style) + backwards: false // true to start slideshow at last slide and move backwards through the stack +}; + +})(jQuery); + + +/*! + * jQuery Cycle Plugin Transition Definitions + * This script is a plugin for the jQuery Cycle Plugin + * Examples and documentation at: http://malsup.com/jquery/cycle/ + * Copyright (c) 2007-2010 M. Alsup + * Version: 2.72 + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +(function($) { + +// +// These functions define one-time slide initialization for the named +// transitions. To save file size feel free to remove any of these that you +// don't need. +// +$.fn.cycle.transitions.none = function($cont, $slides, opts) { + opts.fxFn = function(curr,next,opts,after){ + $(next).show(); + $(curr).hide(); + after(); + }; +} + +// scrollUp/Down/Left/Right +$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var h = $cont.height(); + opts.cssBefore ={ top: h, left: 0 }; + opts.cssFirst = { top: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { top: -h }; +}; +$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var h = $cont.height(); + opts.cssFirst = { top: 0 }; + opts.cssBefore= { top: -h, left: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { top: h }; +}; +$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var w = $cont.width(); + opts.cssFirst = { left: 0 }; + opts.cssBefore= { left: w, top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: 0-w }; +}; +$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var w = $cont.width(); + opts.cssFirst = { left: 0 }; + opts.cssBefore= { left: -w, top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: w }; +}; +$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) { + $cont.css('overflow','hidden').width(); + opts.before.push(function(curr, next, opts, fwd) { + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW); + opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW; + }); + opts.cssFirst = { left: 0 }; + opts.cssBefore= { top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { top: 0 }; +}; +$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push(function(curr, next, opts, fwd) { + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1); + opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH; + }); + opts.cssFirst = { top: 0 }; + opts.cssBefore= { left: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { left: 0 }; +}; + +// slideX/slideY +$.fn.cycle.transitions.slideX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $(opts.elements).not(curr).hide(); + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.animIn.width = next.cycleW; + }); + opts.cssBefore = { left: 0, top: 0, width: 0 }; + opts.animIn = { width: 'show' }; + opts.animOut = { width: 0 }; +}; +$.fn.cycle.transitions.slideY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $(opts.elements).not(curr).hide(); + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.animIn.height = next.cycleH; + }); + opts.cssBefore = { left: 0, top: 0, height: 0 }; + opts.animIn = { height: 'show' }; + opts.animOut = { height: 0 }; +}; + +// shuffle +$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) { + var i, w = $cont.css('overflow', 'visible').width(); + $slides.css({left: 0, top: 0}); + opts.before.push(function(curr,next,opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + }); + // only adjust speed once! + if (!opts.speedAdjusted) { + opts.speed = opts.speed / 2; // shuffle has 2 transitions + opts.speedAdjusted = true; + } + opts.random = 0; + opts.shuffle = opts.shuffle || {left:-w, top:15}; + opts.els = []; + for (i=0; i < $slides.length; i++) + opts.els.push($slides[i]); + + for (i=0; i < opts.currSlide; i++) + opts.els.push(opts.els.shift()); + + // custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!) + opts.fxFn = function(curr, next, opts, cb, fwd) { + var $el = fwd ? $(curr) : $(next); + $(next).css(opts.cssBefore); + var count = opts.slideCount; + $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() { + var hops = $.fn.cycle.hopsFromLast(opts, fwd); + for (var k=0; k < hops; k++) + fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop()); + if (fwd) { + for (var i=0, len=opts.els.length; i < len; i++) + $(opts.els[i]).css('z-index', len-i+count); + } + else { + var z = $(curr).css('z-index'); + $el.css('z-index', parseInt(z)+1+count); + } + $el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() { + $(fwd ? this : curr).hide(); + if (cb) cb(); + }); + }); + }; + opts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 }; +}; + +// turnUp/Down/Left/Right +$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.cssBefore.top = next.cycleH; + opts.animIn.height = next.cycleH; + }); + opts.cssFirst = { top: 0 }; + opts.cssBefore = { left: 0, height: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { height: 0 }; +}; +$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssFirst = { top: 0 }; + opts.cssBefore = { left: 0, top: 0, height: 0 }; + opts.animOut = { height: 0 }; +}; +$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.cssBefore.left = next.cycleW; + opts.animIn.width = next.cycleW; + }); + opts.cssBefore = { top: 0, width: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { width: 0 }; +}; +$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.animIn.width = next.cycleW; + opts.animOut.left = curr.cycleW; + }); + opts.cssBefore = { top: 0, left: 0, width: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { width: 0 }; +}; + +// zoom +$.fn.cycle.transitions.zoom = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,false,true); + opts.cssBefore.top = next.cycleH/2; + opts.cssBefore.left = next.cycleW/2; + opts.animIn = { top: 0, left: 0, width: next.cycleW, height: next.cycleH }; + opts.animOut = { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 }; + }); + opts.cssFirst = { top:0, left: 0 }; + opts.cssBefore = { width: 0, height: 0 }; +}; + +// fadeZoom +$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,false); + opts.cssBefore.left = next.cycleW/2; + opts.cssBefore.top = next.cycleH/2; + opts.animIn = { top: 0, left: 0, width: next.cycleW, height: next.cycleH }; + }); + opts.cssBefore = { width: 0, height: 0 }; + opts.animOut = { opacity: 0 }; +}; + +// blindX +$.fn.cycle.transitions.blindX = function($cont, $slides, opts) { + var w = $cont.css('overflow','hidden').width(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.width = next.cycleW; + opts.animOut.left = curr.cycleW; + }); + opts.cssBefore = { left: w, top: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: w }; +}; +// blindY +$.fn.cycle.transitions.blindY = function($cont, $slides, opts) { + var h = $cont.css('overflow','hidden').height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssBefore = { top: h, left: 0 }; + opts.animIn = { top: 0 }; + opts.animOut = { top: h }; +}; +// blindZ +$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) { + var h = $cont.css('overflow','hidden').height(); + var w = $cont.width(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssBefore = { top: h, left: w }; + opts.animIn = { top: 0, left: 0 }; + opts.animOut = { top: h, left: w }; +}; + +// growX - grow horizontally from centered 0 width +$.fn.cycle.transitions.growX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.cssBefore.left = this.cycleW/2; + opts.animIn = { left: 0, width: this.cycleW }; + opts.animOut = { left: 0 }; + }); + opts.cssBefore = { width: 0, top: 0 }; +}; +// growY - grow vertically from centered 0 height +$.fn.cycle.transitions.growY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.cssBefore.top = this.cycleH/2; + opts.animIn = { top: 0, height: this.cycleH }; + opts.animOut = { top: 0 }; + }); + opts.cssBefore = { height: 0, left: 0 }; +}; + +// curtainX - squeeze in both edges horizontally +$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true,true); + opts.cssBefore.left = next.cycleW/2; + opts.animIn = { left: 0, width: this.cycleW }; + opts.animOut = { left: curr.cycleW/2, width: 0 }; + }); + opts.cssBefore = { top: 0, width: 0 }; +}; +// curtainY - squeeze in both edges vertically +$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false,true); + opts.cssBefore.top = next.cycleH/2; + opts.animIn = { top: 0, height: next.cycleH }; + opts.animOut = { top: curr.cycleH/2, height: 0 }; + }); + opts.cssBefore = { left: 0, height: 0 }; +}; + +// cover - curr slide covered by next slide +$.fn.cycle.transitions.cover = function($cont, $slides, opts) { + var d = opts.direction || 'left'; + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + if (d == 'right') + opts.cssBefore.left = -w; + else if (d == 'up') + opts.cssBefore.top = h; + else if (d == 'down') + opts.cssBefore.top = -h; + else + opts.cssBefore.left = w; + }); + opts.animIn = { left: 0, top: 0}; + opts.animOut = { opacity: 1 }; + opts.cssBefore = { top: 0, left: 0 }; +}; + +// uncover - curr slide moves off next slide +$.fn.cycle.transitions.uncover = function($cont, $slides, opts) { + var d = opts.direction || 'left'; + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + if (d == 'right') + opts.animOut.left = w; + else if (d == 'up') + opts.animOut.top = -h; + else if (d == 'down') + opts.animOut.top = h; + else + opts.animOut.left = -w; + }); + opts.animIn = { left: 0, top: 0 }; + opts.animOut = { opacity: 1 }; + opts.cssBefore = { top: 0, left: 0 }; +}; + +// toss - move top slide and fade away +$.fn.cycle.transitions.toss = function($cont, $slides, opts) { + var w = $cont.css('overflow','visible').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + // provide default toss settings if animOut not provided + if (!opts.animOut.left && !opts.animOut.top) + opts.animOut = { left: w*2, top: -h/2, opacity: 0 }; + else + opts.animOut.opacity = 0; + }); + opts.cssBefore = { left: 0, top: 0 }; + opts.animIn = { left: 0 }; +}; + +// wipe - clip animation +$.fn.cycle.transitions.wipe = function($cont, $slides, opts) { + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.cssBefore = opts.cssBefore || {}; + var clip; + if (opts.clip) { + if (/l2r/.test(opts.clip)) + clip = 'rect(0px 0px '+h+'px 0px)'; + else if (/r2l/.test(opts.clip)) + clip = 'rect(0px '+w+'px '+h+'px '+w+'px)'; + else if (/t2b/.test(opts.clip)) + clip = 'rect(0px '+w+'px 0px 0px)'; + else if (/b2t/.test(opts.clip)) + clip = 'rect('+h+'px '+w+'px '+h+'px 0px)'; + else if (/zoom/.test(opts.clip)) { + var top = parseInt(h/2); + var left = parseInt(w/2); + clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)'; + } + } + + opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)'; + + var d = opts.cssBefore.clip.match(/(\d+)/g); + var t = parseInt(d[0]), r = parseInt(d[1]), b = parseInt(d[2]), l = parseInt(d[3]); + + opts.before.push(function(curr, next, opts) { + if (curr == next) return; + var $curr = $(curr), $next = $(next); + $.fn.cycle.commonReset(curr,next,opts,true,true,false); + opts.cssAfter.display = 'block'; + + var step = 1, count = parseInt((opts.speedIn / 13)) - 1; + (function f() { + var tt = t ? t - parseInt(step * (t/count)) : 0; + var ll = l ? l - parseInt(step * (l/count)) : 0; + var bb = b < h ? b + parseInt(step * ((h-b)/count || 1)) : h; + var rr = r < w ? r + parseInt(step * ((w-r)/count || 1)) : w; + $next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' }); + (step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none'); + })(); + }); + opts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 }; + opts.animIn = { left: 0 }; + opts.animOut = { left: 0 }; +}; + +})(jQuery); diff --git a/app/assets/javascripts/lib/jquery.preload.min.js b/app/assets/javascripts/lib/jquery.preload.min.js new file mode 100755 index 000000000..bd1562641 --- /dev/null +++ b/app/assets/javascripts/lib/jquery.preload.min.js @@ -0,0 +1,42 @@ +// (function($) { +// var cache = []; +// // Arguments are image paths relative to the current page. +// $.preLoadImages = function() { +// var args_len = arguments.length; +// for (var i = args_len; i--;) { +// var cacheImage = document.createElement('img'); +// cacheImage.src = arguments[i]; +// cache.push(cacheImage); +// } +// } +// })(jQuery) + + +(function($) { + $.preloadimages = function (arr){ + var newimages=[], loadedimages=0 + var postaction=function(){} + var arr=(typeof arr!="object")? [arr] : arr + function imageloadpost(){ + loadedimages++ + if (loadedimages==arr.length){ + postaction(newimages) //call postaction and pass in newimages array as parameter + } + } + for (var i=0; i"); + } + $("#content").hide("drop",o.transitionTime,function(){ + o.currenthtml = target; + o.currentface = target; + + var cache = false; + if(!o.desktopData[o.currentface]){ + $(o.contentHolder).empty().load(url,function(){ + if(typeof o.data_method != "undefined"){ + if(o.data_method != "") + window.o[o.data_method](target,url,cache); + } + if(!customload) + o.sub_menu_item($(o.contentHolder).find("*[content-type=menu] a[load=true]")); + else{ + if(submenuitem) + o.sub_menu_item($(o.contentHolder).find("*[content-type=menu] a[custom-load="+submenuitem+"]")); + else + o.sub_menu_item($(o.contentHolder).find("*[content-type=menu] a[load=true]")); + } + + }) + }else{ + $(o.contentHolder).html(o.desktopData[o.currentface]); + if(!customload) + o.sub_menu_item($(o.contentHolder).find("*[content-type=menu] a[load=true]")); + else{ + if(submenuitem) + o.sub_menu_item($(o.contentHolder).find("*[content-type=menu] a[custom-load="+submenuitem+"]")); + else + o.sub_menu_item($(o.contentHolder).find("*[content-type=menu] a[load=true]")); + } + cache = true; + if(typeof o.data_method != "undefined"){ + if(o.data_method != "") + window.o[o.data_method](target,url,cache); + } + } + }); + } + } this.sub_menu_item = function(dom){ - if(!dom.hasClass('active')){ var sub_data_method = dom.attr('callback-method'); if(sub_data_method){ $("div[container=true]").load(dom.attr("href"),function(){ @@ -200,7 +279,6 @@ var orbitDesktop = function(dom){ } $('*[content-type=menu] a').removeClass('thmc1 thmtxt active'); dom.addClass('thmc1 thmtxt active'); - } } this.initializeDesktop = function(target,url,cache){ //this is for initializing main desktops that are sections and tiles @@ -582,6 +660,15 @@ var orbitDesktop = function(dom){ }; this.initializeSettings = function(target,url,cache){ //this is to initialize setting page + this.initializeSettings.account = function(data){} + this.initializeSettings.passwordUpdate = function(data){ + if(data.success){ + o.notify(data.msg,"success"); + }else{ + o.notify(data.msg,"alert"); + } + } + this.initializeSettings.sections = function(){ // this load section page in setting page var bindHandlers = function(){ // binding handlers in section page $('.tinycanvas').each(function(){ diff --git a/app/assets/stylesheets/desktop.css b/app/assets/stylesheets/desktop.css index 226afb8f1..3150f23ce 100644 --- a/app/assets/stylesheets/desktop.css +++ b/app/assets/stylesheets/desktop.css @@ -6,9 +6,11 @@ *= require bootstrap *= require bootstrap-orbit *= require jquery.miniColors + *= require jquery-ui *= require font-awesome *= require desktopmain *= require desktopmedia *= require orbitTimeline *= require orbit-bar + *= require icons */ \ No newline at end of file diff --git a/app/assets/stylesheets/icons.css.erb b/app/assets/stylesheets/icons.css.erb new file mode 100644 index 000000000..d71b7cf96 --- /dev/null +++ b/app/assets/stylesheets/icons.css.erb @@ -0,0 +1,519 @@ +/* WARNING: Your are using ligatures for your icon font. + Ligatures are not supported in IE 9 (and older). + Use the Private Use Area encoding for best browser support. +==================================================================== */ +@font-face { + font-family: 'entypo'; + src:url(<%= asset_path 'entypo.eot' %>); + src:url(<%= asset_path 'entypo.eot?#iefix' %>) format('embedded-opentype'), + url(<%= asset_path 'entypo.svg#entypo' %>) format('svg'), + url(<%= asset_path 'entypo.woff' %>) format('woff'), + url(<%= asset_path 'entypo.ttf' %>) format('truetype'); + font-weight: normal; + font-style: normal; +} + +/* Use the following CSS code if you want to use data attributes for inserting your icons */ +[data-icon]:before { + font-family: 'entypo'; + content: attr(data-icon); + speak: none; + /* Enable Ligatures */ + -webkit-font-feature-settings:"liga","dlig"; + -moz-font-feature-settings:"liga=1, dlig=1"; + -moz-font-feature-settings:"liga","dlig"; + -ms-font-feature-settings:"liga","dlig"; + -o-font-feature-settings:"liga","dlig"; + font-feature-settings:"liga","dlig"; + text-rendering:optimizeLegibility; + font-weight: normal; + -webkit-font-smoothing: antialiased; +} + +/* Use the following CSS code if you want to have a class per icon */ +[class^="icons-"]:before, [class*=" icons-"]:before { + font-size: 1.5em; + font-family: 'entypo'; + font-style: normal; + speak: none; + /* Enable Ligatures */ + -webkit-font-feature-settings:"liga","dlig"; + -moz-font-feature-settings:"liga=1, dlig=1"; + -moz-font-feature-settings:"liga","dlig"; + -ms-font-feature-settings:"liga","dlig"; + -o-font-feature-settings:"liga","dlig"; + font-feature-settings:"liga","dlig"; + text-rendering:optimizeLegibility; + font-weight: normal; + -webkit-font-smoothing: antialiased; + display: inline-block; + text-decoration: inherit; +} +a [class^="icons-"], a [class*=" icons-"] { + display: inline-block; + text-decoration: inherit; +} +/* makes the font 33% larger relative to the icon container */ +.icons-large:before { + vertical-align: top; + font-size: 1.3333333333333333em; +} +.btn [class^="icons-"], .btn [class*=" icons-"] { + /* keeps button heights with and without icons the same */ + + line-height: .9em; +} +li [class^="icons-"], li [class*=" icons-"] { + display: inline-block; + width: 1.25em; + text-align: center; + margin-right: 10px; +} +li .icons-large[class^="icons-"], li .icons-large[class*=" icons-"] { + /* 1.5 increased font size for icons-large * 1.25 width */ + + width: 1.875em; +} +li[class^="icons-"], li[class*=" icons-"] { + margin-left: 0; + list-style-type: none; +} +li[class^="icons-"]:before, li[class*=" icons-"]:before { + text-indent: -2em; + text-align: center; +} +li[class^="icons-"].icons-large:before, li[class*=" icons-"].icons-large:before { + text-indent: -1.3333333333333333em; +} +.icons-phone:before { + content: "\70\68\6f\6e\65"; +} +.icons-directions:before { + content: "\64\69\72\65\63\74\69\6f\6e\73"; +} +.icons-mail:before { + content: "\6d\61\69\6c"; +} +.icons-pencil:before { + content: "\70\65\6e\63\69\6c"; +} +.icons-paperclip:before { + content: "\70\61\70\65\72\63\6c\69\70"; +} +.icons-drawer:before { + content: "\64\72\61\77\65\72"; +} +.icons-member:before { + content: "\6d\65\6d\62\65\72"; +} +.icons-group:before { + content: "\67\72\6f\75\70"; +} +.icons-addmember:before { + content: "\61\64\64\6d\65\6d\62\65\72"; +} +.icons-location:before { + content: "\6c\6f\63\61\74\69\6f\6e"; +} +.icons-share:before { + content: "\73\68\61\72\65"; +} +.icons-heart-full:before { + content: "\68\65\61\72\74\2d\66\75\6c\6c"; +} +.icons-heart-bare:before { + content: "\68\65\61\72\74\2d\62\61\72\65"; +} +.icons-star-full:before { + content: "\73\74\61\72\2d\66\75\6c\6c"; +} +.icons-star-bare:before { + content: "\73\74\61\72\2d\62\61\72\65"; +} +.icons-discuss:before { + content: "\64\69\73\63\75\73\73"; +} +.icons-comment:before { + content: "\63\6f\6d\6d\65\6e\74"; +} +.icons-quote:before { + content: "\71\75\6f\74\65"; +} +.icons-house:before { + content: "\68\6f\75\73\65"; +} +.icons-search:before { + content: "\73\65\61\72\63\68"; +} +.icons-printer:before { + content: "\70\72\69\6e\74\65\72"; +} +.icons-bell:before { + content: "\62\65\6c\6c"; +} +.icons-link:before { + content: "\6c\69\6e\6b"; +} +.icons-flag:before { + content: "\66\61\6c\67"; +} +.icons-cog:before { + content: "\63\6f\67"; +} +.icons-tools:before { + content: "\74\6f\6f\6c\73"; +} +.icons-tag:before { + content: "\74\61\67"; +} +.icons-camera:before { + content: "\63\61\6d\65\72\61"; +} +.icons-megaphone:before { + content: "\6d\65\67\61\70\68\6f\6e\65"; +} +.icons-new:before { + content: "\6e\65\77"; +} +.icons-graduation:before { + content: "\67\72\61\64\75\61\74\69\6f\6e"; +} +.icons-books:before { + content: "\62\6f\6f\6b\73"; +} +.icons-page:before { + content: "\70\61\67\65"; +} +.icons-lifebuoy:before { + content: "\6c\69\66\65\62\75\6f\79"; +} +.icons-eye:before { + content: "\65\79\65"; +} +.icons-clock:before { + content: "\63\6c\6f\63\6b"; +} +.icons-calendar:before { + content: "\63\61\6c\65\6e\64\61\72"; +} +.icons-briefcase:before { + content: "\62\72\69\65\66\63\61\73\65"; +} +.icons-gauge:before { + content: "\67\61\75\67\65"; +} +.icons-language:before { + content: "\6c\61\6e\67\75\61\67\65"; +} +.icons-keys:before { + content: "\6b\65\79\73"; +} +.icons-earth:before { + content: "\65\61\72\74\68"; +} +.icons-keyboard:before { + content: "\6b\65\79\62\6f\61\72\64"; +} +.icons-browser:before { + content: "\62\72\6f\77\73\65\72"; +} +.icons-publish:before { + content: "\70\75\62\6c\69\73\68"; +} +.icons-code:before { + content: "\63\6f\64\65"; +} +.icons-light-bulb:before { + content: "\6c\69\67\68\74\2d\62\75\6c\62"; +} +.icons-database:before { + content: "\64\61\74\61\62\61\73\65"; +} +.icons-box:before { + content: "\62\6f\78"; +} +.icons-rss:before { + content: "\72\73\73"; +} +.icons-clipboard:before { + content: "\63\6c\69\70\62\6f\61\72\64"; +} +.icons-cart:before { + content: "\63\61\72\74"; +} +.icons-template:before { + content: "\75\6e\74\69\74\6c\65\64"; +} +.icons-statistics:before { + content: "\73\74\61\74\69\73\74\69\63\73"; +} +.icons-pie:before { + content: "\70\69\65"; +} +.icons-bars:before { + content: "\62\61\72\73"; +} +.icons-graph:before { + content: "\67\72\61\70\68"; +} +.icons-lock:before { + content: "\6c\6f\63\6b"; +} +.icons-unlock:before { + content: "\75\6e\6c\6f\63\6b"; +} +.icons-outlog:before { + content: "\6f\75\74\6c\6f\67"; +} +.icons-inlog:before { + content: "\69\6e\6c\6f\67"; +} +.icons-checkmark:before { + content: "\63\68\65\63\6b\6d\61\72\6b"; +} +.icons-aminus:before { + content: "\61\6d\69\6e\75\73"; +} +.icons-aplus:before { + content: "\61\70\6c\75\73"; +} +.icons-aclose:before { + content: "\61\63\6c\6f\73\65"; +} +.icons-bminus:before { + content: "\62\6d\69\6e\75\73"; +} +.icons-bplus:before { + content: "\62\70\6c\75\73"; +} +.icons-bclose:before { + content: "\62\63\6c\6f\73\65"; +} +.icons-cminus:before { + content: "\63\6d\69\6e\75\73"; +} +.icons-cplus:before { + content: "\63\70\6c\75\73"; +} +.icons-cross:before { + content: "\63\72\6f\73\73"; +} +.icons-blocked:before { + content: "\62\6c\6f\63\6b\65\64"; +} +.icons-information:before { + content: "\69\6e\66\6f\72\6d\61\74\69\6f\6e"; +} +.icons-binfo:before { + content: "\62\69\6e\66\6f"; +} +.icons-question:before { + content: "\71\75\65\73\74\69\6f\6e"; +} +.icons-help:before { + content: "\68\65\6c\70"; +} +.icons-warning:before { + content: "\77\61\72\6e\69\6e\67"; +} +.icons-shuffle:before { + content: "\73\68\75\66\66\6c\65"; +} +.icons-return:before { + content: "\72\65\74\75\72\6e"; +} +.icons-enter:before { + content: "\65\6e\74\65\72"; +} +.icons-exchange:before { + content: "\65\78\63\68\61\6e\67\65"; +} +.icons-loop:before { + content: "\6c\6f\6f\70"; +} +.icons-th-list:before { + content: "\74\68\2d\6c\69\73\74"; +} +.icons-th-large:before { + content: "\74\68\2d\6c\61\72\67\65"; +} +.icons-align-justify:before { + content: "\61\6c\69\67\6e\2d\6a\75\73\74\69\66\79"; +} +.icons-wtext:before { + content: "\77\74\65\78\74"; +} +.icons-btext:before { + content: "\62\74\65\78\74"; +} +.icons-pictures:before { + content: "\70\69\63\74\75\72\65"; +} +.icons-video:before { + content: "\76\69\64\65\6f"; +} +.icons-music:before { + content: "\6d\6f\75\73\65"; +} +.icons-folder:before { + content: "\66\6f\6c\64\65\72"; +} +.icons-archive:before { + content: "\61\72\63\68\69\76\65"; +} +.icons-trash:before { + content: "\74\72\61\73\68"; +} +.icons-upload:before { + content: "\75\70\6c\6f\61\64"; +} +.icons-download:before { + content: "\64\6f\77\6e\6c\6f\61\64"; +} +.icons-disk:before { + content: "\64\69\73\6b"; +} +.icons-bookmark:before { + content: "\62\6f\6f\6b\6d\61\72\6b"; +} +.icons-booma:before { + content: "\62\6f\6f\6d\61"; +} +.icons-resize-enlarge:before { + content: "\72\65\73\69\7a\65\2d\65\6e\6c\61\72\67\65"; +} +.icons-resize-shrink:before { + content: "\72\65\73\69\7a\65\2d\73\68\72\69\6e\6b"; +} +.icons-flow-tree:before { + content: "\66\6c\6f\77\2d\74\72\65\65"; +} +.icons-arrow-left-a:before { + content: "\61\72\72\6f\77\2d\6c\65\66\74\2d\61"; +} +.icons-arrow-bottom-a:before { + content: "\61\72\72\6f\77\2d\62\6f\74\74\6f\6d\2d\61"; +} +.icons-arrow-top-a:before { + content: "\61\72\72\6f\77\2d\74\6f\70\2d\61"; +} +.icons-arrow-right-a:before { + content: "\61\72\72\6f\77\2d\72\69\67\68\74\2d\61"; +} +.icons-arrow-left-b:before { + content: "\61\72\72\6f\77\2d\6c\65\66\74\2d\62"; +} +.icons-arrow-bottom-b:before { + content: "\61\72\72\6f\77\2d\62\6f\74\74\6f\6d\2d\62"; +} +.icons-arrow-top-b:before { + content: "\61\72\72\6f\77\2d\74\6f\70\2d\62"; +} +.icons-arrow-right-b:before { + content: "\61\72\72\6f\77\2d\72\69\67\68\74\2d\62"; +} +.icons-arrow-left-c:before { + content: "\61\72\72\6f\77\2d\6c\65\66\74\2d\63"; +} +.icons-arrow-bottom-c:before { + content: "\61\72\72\6f\77\2d\62\6f\74\74\6f\6d\2d\63"; +} +.icons-arrow-top-c:before { + content: "\61\72\72\6f\77\2d\74\6f\70\2d\63"; +} +.icons-arrow-right-c:before { + content: "\61\72\72\6f\77\2d\72\69\67\68\74\2d\63"; +} +.icons-arrow-left-d:before { + content: "\61\72\72\6f\77\2d\6c\65\66\74\2d\64"; +} +.icons-arrow-bottom-d:before { + content: "\61\72\72\6f\77\2d\62\6f\74\74\6f\6d\2d\64"; +} +.icons-arrow-top-d:before { + content: "\61\72\72\6f\77\2d\74\6f\70\2d\64"; +} +.icons-arrow-right-d:before { + content: "\61\72\72\6f\77\2d\72\69\67\68\74\2d\64"; +} +.icons-arrow-left-e:before { + content: "\61\72\72\6f\77\2d\6c\65\66\74\2d\65"; +} +.icons-arrow-bottom-e:before { + content: "\61\72\72\6f\77\2d\62\6f\74\74\6f\6d\2d\65"; +} +.icons-arrow-top-e:before { + content: "\61\72\72\6f\77\2d\74\6f\70\2d\65"; +} +.icons-arrow-right-e:before { + content: "\61\72\72\6f\77\2d\72\69\67\68\74\2d\65"; +} +.icons-arrow-left-f:before { + content: "\61\72\72\6f\77\2d\6c\65\66\74\2d\66"; +} +.icons-arrow-bottom-f:before { + content: "\61\72\72\6f\77\2d\62\6f\74\74\6f\6d\2d\66"; +} +.icons-arrow-top-f:before { + content: "\61\72\72\6f\77\2d\74\6f\70\2d\66"; +} +.icons-left-f:before { + content: "\61\72\72\6f\77\2d\72\69\67\68\74\2d\66"; +} +.icons-menu:before { + content: "\6d\65\6e\75"; +} +.icons-ellipsis:before { + content: "\65\6c\6c\69\70\73\69\73"; +} +.icons-dots:before { + content: "\64\6f\74\73"; +} +.icons-dot:before { + content: "\64\6f\74"; +} +.icons-like:before { + content: "\6c\69\6b\65"; +} +.icons-suck:before { + content: "\73\75\63\6b"; +} +.icons-export:before { + content: "\65\78\70\6f\72\74"; +} +.icons-vcard:before { + content: "\76\63\61\72\64"; +} +.icons-flow-cascade:before { + content: "\21"; +} +.icons-landscape:before { + content: "\22"; +} +.icons-brush:before { + content: "\62\72\75\73\68"; +} +.icons-palette:before { + content: "\70\61\6c\65\74\74\65"; +} +.icons-desktop:before { + content: "\64\65\73\6b\74\6f\70"; +} +.icons-plane:before { + content: "\70\6c\61\6e\65"; +} +.icons-booklet:before { + content: "\62\6f\6f\6b\6c\65\74"; +} +.icons-update:before { + content: "\75\70\64\61\74\65"; +} +.icons-reload:before { + content: "\72\65\6c\6f\61\64"; +} +.icons-unload:before { + content: "\75\6e\6c\6f\61\64"; +} +.icons-trophy:before { + content: "\74\72\6f\70\68\79"; +} diff --git a/app/assets/stylesheets/modulestore.css b/app/assets/stylesheets/modulestore.css new file mode 100644 index 000000000..ef265aeb8 --- /dev/null +++ b/app/assets/stylesheets/modulestore.css @@ -0,0 +1,259 @@ +ul, li{ + margin: 0; + list-style: none; +} +body{ + color: #000; + font-family: helvetica, arial, sans-serif; +} +.md-bg{ + padding-top: 30px; + background: #e8eef5; + max-height: 300px; +} +.md-store{ + margin: 0 40px; + min-width: 780px; +} +.modulestore .header{ + width: 780px; + margin: 0 auto; +} +.home{ + margin: 39px 0 0 18px; + background: url(<%= asset_path 'modulestore/h1_bg.png' %>) left top no-repeat; + width: 174px; + height: 39px; + display: block; +} +.home:hover{ + -moz-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; + opacity: .85; +} +.home:active{ + position: relative; + top: 1px; +} +.home a{ + text-indent: -9999px; + display: block; +} +.slide{ + position: relative; +} +.slide-wrap{ + position: relative; + width: 780px; + margin: 0 auto; +} +.slide{ + margin: 25px 0 55px 0; + width: 740px; + height: 220px; +} +.slide-nav a{ + overflow: hidden; + position: absolute; + top: 50%; + left: 10px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 50px; + font-weight: 100; + line-height: 30px; + color: #fff; + text-align: center; + background: #999; + border: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + opacity: 1; + filter: alpha(opacity=100); + z-index: 10; +} +.slide-nav a{ + display: block; + text-decoration: none; +} +.slide-nav .next { + right: 10px; + left: auto; + background: #999; +} +.slide-nav .next:hover{ + background: #529bdf; + opacity: 1; + filter: alpha(opacity=100); +} +.slide-nav .prev:hover{ + background: #529bdf; + opacity: 1; + filter: alpha(opacity=100); +} +.slide-feature{ + background: url(<%= asset_path 'modulestore/carousel_feature.png' %>) left top no-repeat; + width: 435px; + height: 305px; + position: absolute; + right: 60px; + top: -25px; + z-index: 9; +} +.app{ + width: 240px; +} +.app-list a{ + width: 200px; + height: 200px; + overflow: hidden; + display: block; + background: #00699f; + position: relative; + margin: 0 0 40px 0; + -webkit-box-shadow: 0px 2px 10px 0px #a3a3a3; + box-shadow: 0px 2px 10px 0px #a3a3a3; +} +.app-list .detail{ + background: #f0f0f0; + position: absolute; + width: 180px; + bottom: 0; + left: 0; + padding: 10px 10px 5px 10px; +} +.app-list .detail .apptitle{ + display: block; + font-size: 13px; + margin-bottom: 2px; +} +.app-list .detail .apptitle:hover{ + text-decoration: underline; +} +.app-list .detail .apptitle:active{ + position: relative; + top: 1px; +} + +.app-list .detail .price{ + font-size: 12px; + color: #76787a; +} + +/* module detail page */ +.modulestore-detail .header{ + margin-bottom: 30px; +} +.breadcrumb{ + background: none; + font-size: 12px; + margin: 10px 0 0 0; + padding: 0; + font-style: italic; +} +.left-col.span3{ + width: 170px; +} +.app-icon{ + border: 1px solid #ddd; + margin: 0 0 5px 0; +} +.price.btn.btn-primary{ + margin: 0 0 5px 10px; +} +.downloads{ + font-size: 12px; + color: #363636; +} +.downloads span{ + color: #727272; +} +.who-are-using-this-apps, .recommends{ + font-size: 12px; + padding: 0; + margin: 7px 0; + line-height: 1.9; +} +.download-meta ul li{ + font-size: 11px; + padding-left: 5px; +} +.recommend-thumbs{ + margin: 0 0 0 15px; +} +.recommend-thumbs img{ + display: inline-block; + border: 1px solid #dcdcdc; + margin-bottom: 10px; +} +.recommend-thumbs a:hover img{ + -moz-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; + opacity: .85; +} +.right-col.span6{ + width: 530px; +} +.right-col h2{ + font-size: 24px; + color: #3e94e4; + font-weight: 100; + line-height: 28px; +} +.right-col h3{ + color: #363636; + font-size: 15px; + font-weight: 100; + margin: 8px 0; + line-height: 20px; +} +.app-description{ + color: #5d5d5d; + font-size: 12px; +} + +.screenshots .slide{ + width: 580px; + height: 360px; +} +.detail-slide-nav { + text-align: center; + z-index: 50; + position: absolute; + bottom: 0; + left: 0; + background: #000000; + opacity: .75; + width: 580px; + line-height: 20px; +} +.detail-slide-nav a{ + color: #fff; + background: #fff; + margin: 0 7px 0 0; + -webkit-border-radius: 5px; + border-radius: 5px; + height: 10px; + width: 10px; + display: inline-block; + overflow: hidden; +} +.detail-slide-nav a:hover{ + color: #4bbaf3; + background: #4bbaf3; + text-decoration: none; +} +.detail-slide-nav a.activeSlide { + background: #4bbaf3; + color: #4bbaf3; +} +.detail-slide-nav a:focus { + outline: none; +} + diff --git a/app/assets/stylesheets/new_admin.css.erb b/app/assets/stylesheets/new_admin.css.erb index 8d1e8a8b2..a634fb427 100644 --- a/app/assets/stylesheets/new_admin.css.erb +++ b/app/assets/stylesheets/new_admin.css.erb @@ -14,4 +14,5 @@ *= require widgets *= require scroll_style *= require isotope + *= require icons */ diff --git a/app/assets/stylesheets/orbit-bar.css.erb b/app/assets/stylesheets/orbit-bar.css.erb index adde331e2..384412605 100644 --- a/app/assets/stylesheets/orbit-bar.css.erb +++ b/app/assets/stylesheets/orbit-bar.css.erb @@ -69,9 +69,6 @@ #orbit-bar .orbit-logo .dropdown-menu { left: -15px; } -#orbit-bar .orbit-logo .dropdown-menu>li>a:hover>i { - background-image: url(<%= asset_path 'icons_pack_white.png' %>); -} #orbit-bar .nav > li { height: 28px; } @@ -79,13 +76,18 @@ background-color: rgba(0,157,220,1); } #orbit-bar .nav > li > a { - background-image: url(<%= asset_path 'orbit-bar.png' %>); + /*background-image: url(<%= asset_path 'orbit-bar.png' %>);*/ background-repeat:no-repeat; display: inline-block; - width: 16px; + width: 17px; height: 16px; - text-indent: -9999px; - padding:6px; + padding: 6px 6px 6px 5px; +} +#orbit-bar .nav > li > a[data-icon]:before { + font-size: 1.5em; + color: #fff; + line-height: 16px; + text-shadow: none; } #orbit-bar .nav > li.search { overflow: hidden; diff --git a/app/assets/stylesheets/site_editor.css.erb b/app/assets/stylesheets/site_editor.css.erb index 6506589e6..5f571af4c 100644 --- a/app/assets/stylesheets/site_editor.css.erb +++ b/app/assets/stylesheets/site_editor.css.erb @@ -13,4 +13,5 @@ *= require scroll_style *= require site_items *= require sidebar + *= require icons */ \ No newline at end of file diff --git a/app/assets/stylesheets/style.css.erb b/app/assets/stylesheets/style.css.erb index 6a496370b..00ee8e0a1 100644 --- a/app/assets/stylesheets/style.css.erb +++ b/app/assets/stylesheets/style.css.erb @@ -50,11 +50,12 @@ color: #FFF; } #main-sidebar #position [class^="icons"] { - background-image: url(<%= asset_path 'icons_pack_white.png' %>); + color: #FFF; } #main-sidebar #position a { display: block; padding-left: 11px; + height: 36px; } #main-sidebar #position #collapse-menu { height: 16px; @@ -91,9 +92,8 @@ margin: 1px 0; } #main-sidebar .nav > li > a [class^="icons-"] { - opacity: .5; - -moz-opacity: .5; - filter:alpha(opacity=5); + float: left; + color: #333; } #main-sidebar .nav > li.active > a [class^="icons-"] { opacity: 1; @@ -103,6 +103,7 @@ #main-sidebar .overview > .nav > li > a { padding: 3px 13px; line-height: 30px; + min-height: 30px; background-color: #e2e2e2; margin-left: -17px; border-top: 1px solid #DBDBDB; @@ -111,6 +112,13 @@ -webkit-box-shadow: inset -5px 0px 15px rgba(0, 0, 0, .18), 0px -1px 0px rgba(0, 0, 0, .1); -moz-box-shadow: inset -5px 0px 15px rgba(0, 0, 0, .18), 0px -1px 0px rgba(0, 0, 0, .1); } +#main-sidebar .overview > .nav > li > a:after { + clear: both; + display: block; + height: 0; + content: ""; + visibility: hidden; +} #main-sidebar .overview > .nav > li.active > a { background-color: white; box-shadow: none; @@ -126,10 +134,7 @@ -moz-box-shadow: inset -5px 0px 15px rgba(0, 0, 0, .15); } #main-sidebar .overview > .nav > li:hover > a [class^="icons-"] { - background-image: url(<%= asset_path 'icons_pack_white.png' %>); - opacity: 1; - -moz-opacity: 1; - filter:alpha(opacity=10); + color: #fff; } #main-sidebar .nav > li > .nav { margin-left: -15px; @@ -265,7 +270,7 @@ #post-body .editor { } #post-body-content { - padding: 8px 0 8px 6px; + padding: 8px 6px; } #post-body-content .middle { width: 100%; @@ -286,7 +291,7 @@ .filter .accordion-heading { border-bottom: none; border-top: none; - border-left: 1px solid #E9E9E9; + border-left: 1px solid rgba(0,0,0,0.07); border-right: none; -moz-border-radius: 0; -webkit-border-radius: 0; @@ -297,7 +302,7 @@ top: 0; } .filter li:last-child .accordion-heading { - border-right: 1px solid #E9E9E9; + border-right: 1px solid rgba(0,0,0,0.07); } .accordion-group .accordion-toggle .caret { border-top-color: #0088CC; @@ -330,15 +335,20 @@ .filters .accordion-inner { border-top: none; padding: 9px 15px 4px; + position: relative; } .filters .filter-clear { - padding: 5px 5px 0; + padding: 5px 10px 0; border-top: 1px solid rgba(0,0,0,0.1); text-align: right; -webkit-box-shadow: inset 0 1px 0px rgba(255, 255, 255, 0.5); -moz-box-shadow: inset 0 1px 0px rgba(255, 255, 255, 0.5); box-shadow: inset 0 1px 0px rgba(255, 255, 255, 0.5); } +.search-results { + width: 840px; + margin: -250px 0 0 -420px; +} #tags { } #tags .tag { @@ -455,20 +465,27 @@ .img-peview { margin-left: 12px; } -/*.popover img { - max-height: 120px; +.popover .arrow { + border-bottom-color: #333; + border-width: 0 10px 10px; + display: none; +} +.popover img { + max-height: 100%; max-width: 100%; } .popover-inner { width: auto; } .popover-title { + display: none; padding: 5px; } .popover-content { + text-align: center; border-radius: 3px; padding: 5px; -}*/ +} .view-mode { margin: 6px 10px 0 0; @@ -476,9 +493,6 @@ .view-mode .btn { margin-bottom: 0; } -.view-mode .btn { - margin-bottom: 0; -} .view-mode i { font-size: 1.2em; line-height: 17px !important; @@ -532,8 +546,13 @@ .folded #main-sidebar .nav > li > a [class^="icons-"] { margin-left: 1px; } +/*.folded #main-sidebar .viewport { + width: 39px; + background-color: rgba(100,100,100,.3) +}*/ .folded #main-sidebar:hover .viewport { width: 198px; + /*background-color: rgba(100,100,100,.3)*/ } .folded #main-sidebar .overview > .nav-list > li { position: relative; @@ -607,6 +626,13 @@ .text-green { color: #39b54a !important; } +#banner_tab li a { + padding-right: 32px; +} +#banner_tab li [class^="icons-"] { + float: right; + margin-top: 8px; +} .adbanner-setup { margin-right: 10px; margin-bottom: 30px !important; @@ -675,796 +701,4 @@ #category_id, #module_app_id { width: auto; -} - -[class^="icons-"] { - display: inline-block; - width: 16px; - height: 16px; - vertical-align: text-top; - background-image: url(<%= asset_path 'icons_pack.png' %>); - background-position: 16px 16px; - background-repeat: no-repeat; - *margin-right: .3em; - margin-right:10px; -} -[class^="icons-"]:last-child { - *margin-left: 0; -} -.icons-white { - background-image: url(<%= asset_path 'icons_pack_white.png' %>); -} -/*1*/ -.icons-pencil { - background-position: 0 0; -} -.icons-brush { - background-position: -32px 0; -} -.icons-pen { - background-position: -64px 0; -} -.icons-brush-large { - background-position: -128px 0; -} -.icons-pen-small { - background-position: -96px 0; -} -.icons-bucket { - background-position: -160px 0; -} -.icons-eye { - background-position: -192px 0; -} -.icons-ban { - background-position: -224px 0; -} -.icons-trash { - background-position: -256px 0; -} -.icons-zoom { - background-position: -288px 0; -} -.icons-zoom-out { - background-position: -320px 0; -} -.icons-zoom-in { - background-position: -352px 0; -} -.icons-magic { - background-position: -384px 0; -} -.icons-aim { - background-position: -416px 0; -} -/*2*/ -.icons-flag { - background-position: 0 -32px; -} -.icons-paperclip { - background-position: -32px -32px; -} -.icons-share { - background-position: -64px -32px; -} -.icons-link { - background-position: -96px -32px; -} -.icons-tag { - background-position: -128px -32px; -} -.icons-lock { - background-position: -160px -32px; -} -.icons-unlock { - background-position: -192px -32px; -} -.icons-thumbtack { - background-position: -224px -32px; -} -.icons-pin { - background-position: -257px -32px; -} -.icons-shield { - background-position: -288px -32px; -} -.icons-key { - background-position: -320px -32px; -} -.icons-fire { - background-position: -352px -32px; -} -.icons-bulls-eye { - background-position: -384px -32px; -} -.icons-flash { - background-position: -416px -32px; -} -.icons-time { - background-position: -448px -32px; -} -.icons-halo { - background-position: -480px -32px; -} -.icons-hourglass { - background-position: -513px -32px; -} -.icons-alarm-clock { - background-position: -545px -32px; -} -.icons-paper { - background-position: -577px -32px; -} -.icons-banner { - background-position: -608px -32px; -} -/*3*/ -.icons-phone { - background-position: 0px -64px; -} -.icons-mobile { - background-position: -32px -64px; -} -.icons-mail { - background-position: -64px -64px; -} -.icons-mail-open { - background-position: -96px -64px; -} -.icons-mail-read { - background-position: -128px -64px; -} -.icons-content { - background-position: -160px -64px; -} -.icons-content-out { - background-position: -192px -64px; -} -.icons-content-in { - background-position: -224px -64px; -} -.icons-projector { - background-position: -256px -64px; -} -.icons-tape { - background-position: -288px -64px; -} -.icons-chat-a { - background-position: -320px -64px; -} -.icons-chat-b { - background-position: -352px -64px; -} -.icons-chat-c { - background-position: -384px -64px; -} -.icons-comment { - background-position: -416px -64px; -} -.icons-rss { - background-position: -448px -64px; -} -.icons-ship { - background-position: -480px -64px; -} -.icons-send { - background-position: -512px -64px; -} -.icons-bell { - background-position: -544px -64px; -} -.icons-announcement { - background-position: -576px -64px; -} -/*4*/ -.icons-contact { - background-position: 0 -96px; -} -.icons-roll { - background-position: -32px -96px; -} -.icons-member { - background-position: -288px -96px; -} -.icons-member-user { - background-position: -64px -96px; -} -.icons-member-admin { - background-position: -96px -96px; -} -.icons-member-manager{ - background-position: -128px -96px; -} -.icons-member-plus{ - background-position: -160px -96px; -} -.icons-member-minus{ - background-position: -192px -96px; -} -.icons-member-blockade{ - background-position: -224px -96px; -} -.icons-carte { - background-position: -256px -96px; -} -.icons-building { - background-position: -320px -96px; -} -.icons-calendar { - background-position: -352px -96px; -} -.icons-calendars { - background-position: -384px -96px; -} -.icons-out { - background-position: -416px -96px; -} -.icons-desktop { - background-position: -448px -96px; -} -/*5*/ -.icons-page-blank { - background-position: 0px -128px; -} -.icons-page { - background-position: -32px -128px; -} -.icons-page-copy { - background-position: -64px -128px; -} -.icons-folder { - background-position: -96px -128px; -} -.icons-folder-open { - background-position: -128px -128px; -} -.icons-folder-lock { - background-position: -160px -128px; -} -.icons-folder-plus { - background-position: -192px -128px; -} -.icons-folder-minus { - background-position: -224px -128px; -} -.icons-page-plus { - background-position: -256px -128px; -} -.icons-page-minus { - background-position: -288px -128px; -} -.icons-page-edit { - background-position: -320px -128px; -} -.icons-page-download { - background-position: -352px -128px; -} -/*6*/ -.icons-house-w { - background-position: 0px -160px; -} -.icons-house-b { - background-position: -32px -160px; -} -.icons-signs { - background-position: -64px -160px; -} -.icons-globe { - background-position: -96px -160px; -} -.icons-map { - background-position: -128px -160px; -} -.icons-markers { - background-position: -160px -160px; -} -.icons-barrier { - background-position: -192px -160px; -} -.icons-assist { - background-position: -224px -160px; -} -.icons-cones { - background-position: -256px -160px; -} -.icons-group { - background-position: -288px -160px; -} -.icons-cuble { - background-position: -320px -160px; -} -.icons-structure { - background-position: -352px -160px; -} -.icons-layer { - background-position: -384px -160px; -} -/*7*/ -.icons-shopcar-a { - background-position: 0px -192px; -} -.icons-shopcar-b { - background-position: -34px -192px; -} -.icons-purchase { - background-position: -64px -192px; -} -.icons-shopcart { - background-position: -96px -192px; -} -.icons-van { - background-position: -128px -192px; -} -.icons-form { - background-position: -160px -192px; -} -.icons-gift { - background-position: -192px -192px; -} -.icons-credit-card { - background-position: -224px -192px; -} -.icons-cash { - background-position: -256px -192px; -} -.icons-assets { - background-position: -288px -192px; -} -.icons-computer { - background-position: -320px -192px; -} -.icons-library { - background-position: -352px -192px; -} -/*8*/ -.icons-dashboard { - background-position: 0 -224px; -} -.icons-cog { - background-position: -32px -224px; -} -.icons-cogs { - background-position: -64px -224px; -} -.icons-tool { - background-position: -96px -224px; -} -.icons-screwdriver { - background-position: -128px -224px; -} -.icons-wrench { - background-position: -160px -224px; -} -.icons-toolbox { - background-position: -192px -224px; -} -.icons-switch { - background-position: -224px -224px; -} -.icons-valve { - background-position: -256px -224px; -} -/*9*/ -.icons-book-cover { - background-position: 0px -256px; -} -.icons-book-make { - background-position: -32px -256px; -} -.icons-binder { - background-position: -64px -256px; -} -.icons-album { - background-position: -96px -256px; -} -.icons-camera { - background-position: -128px -256px; -} -.icons-video-camera { - background-position: -160px -256px; -} -.icons-pillar { - background-position: -192px -256px; -} -.icons-chart { - background-position: -224px -256px; -} -.icons-picture { - background-position: -256px -256px; -} -.icons-pictures { - background-position: -288px -256px; -} -.icons-brief { - background-position: -320px -256px; -} -.icons-film { - background-position: -352px -256px; -} -.icons-asset { - background-position: -384px -256px; -} -.icons-asset-download { - background-position: -416px -256px; -} -.icons-asset-upload { - background-position: -448px -256px; -} -.icons-music { - background-position: -480px -256px; -} -.icons-book-open-w { - background-position: -512px -256px; -} -.icons-book-open-b { - background-position: -544px -256px; -} -.icons-clapper-board { - background-position: -576px -256px; -} -/*10*/ -.icons-date { - background-position: 0px -288px; -} -.icons-screen { - background-position: -32px -288px; -} -.icons-iphone { - background-position: -64px -288px; -} -.icons-ipad { - background-position: -96px -288px; -} -.icons-ipod { - background-position: -128px -288px; -} -.icons-battery-low { - background-position: -160px -288px; -} -.icons-battery-mid { - background-position: -192px -288px; -} -.icons-battery-full { - background-position: -224px -288px; -} -.icons-battery-charge { - background-position: -256px -288px; -} -/*11*/ -.icons-pie { - background-position: 0px -320px; -} -.icons-histogram { - background-position: -32px -320px; -} -.icons-window { - background-position: -64px -320px; -} -.icons-window-line{ - background-position: -96px -320px; -} -.icons-window-command{ - background-position: -128px -320px; -} -.icons-window-list{ - background-position: -160px -320px; -} -.icons-window-block{ - background-position: -192px -320px; -} -.icons-terminal{ - background-position: -224px -320px; -} -/*12*/ -.icons-heart-w { - background-position: 0px -352px; -} -.icons-heart-b { - background-position: -32px -352px; -} -.icons-like { - background-position: -64px -352px; -} -.icons-hate { - background-position: -96px -352px; -} -.icons-medal { - background-position: -128px -352px; -} -.icons-warning { - background-position: -160px -352px; -} -.icons-check { - background-position: -192px -352px; -} -.icons-check-box-solid { - background-position: -224px -352px; -} -.icons-check-box-dot { - background-position: -256px -352px; -} -.icons-check-2 { - background-position: -288px -352px; -} -.icons-check-circle-solid { - background-position: -320px -352px; -} -.icons-check-circle-dot { - background-position: -352px -352px; -} -.icons-check-circle-b { - background-position: -384px -352px; -} -.icons-star-thin { - background-position: -416px -352px; -} -.icons-star { - background-position: -448px -352px; -} -/*13*/ -.icons-13-1 { - background-position: -0px -384px; -} -.icons-13-2 { - background-position: -32px -384px; -} -.icons-13-3 { - background-position: -64px -384px; -} -.icons-13-4 { - background-position: -96px -384px; -} -.icons-13-5 { - background-position: -128px -384px; -} -.icons-13-6 { - background-position: -160px -384px; -} -.icons-13-7 { - background-position: -192px -384px; -} -.icons-13-8 { - background-position: -224px -384px; -} -.icons-13-9 { - background-position: -256px -384px; -} -/*14*/ -.icons-14-1 { - background-position: -0px -416px; -} -.icons-14-2 { - background-position: -32px -416px; -} -.icons-14-3 { - background-position: -64px -416px; -} -.icons-14-4 { - background-position: -96px -416px; -} -.icons-14-5 { - background-position: -128px -416px; -} -.icons-14-6 { - background-position: -160px -416px; -} -.icons-14-7 { - background-position: -192px -416px; -} -.icons-14-8 { - background-position: -224px -416px; -} -.icons-14-9 { - background-position: -256px -416px; -} -.icons-14-10 { - background-position: -288px -416px; -} -.icons-14-11 { - background-position: -320px -416px; -} -.icons-14-12 { - background-position: -352px -416px; -} -.icons-14-13 { - background-position: -384px -416px; -} -/*15*/ -.icons-15-1 { - background-position: -0px -448px; -} -.icons-15-2 { - background-position: -32px -448px; -} -.icons-15-3 { - background-position: -64px -448px; -} -.icons-15-4 { - background-position: -96px -448px; -} -.icons-15-5 { - background-position: -128px -448px; -} -.icons-15-6 { - background-position: -160px -448px; -} -.icons-15-7 { - background-position: -192px -448px; -} -.icons-15-8 { - background-position: -224px -448px; -} -.icons-15-9 { - background-position: -256px -448px; -} -.icons-15-10 { - background-position: -288px -448px; -} -.icons-15-11 { - background-position: -320px -448px; -} -.icons-15-12 { - background-position: -352px -448px; -} -.icons-15-13 { - background-position: -384px -448px; -} -.icons-15-14 { - background-position: -416px -448px; -} -.icons-15-15 { - background-position: -448px -448px; -} -.icons-15-16 { - background-position: -480px -448px; -} -.icons-15-17 { - background-position: -512px -448px; -} -/*16*/ -.icons-16-1 { - background-position: -0px -480px; -} -.icons-16-2 { - background-position: -32px -480px; -} -.icons-16-3 { - background-position: -64px -480px; -} -.icons-16-4 { - background-position: -96px -480px; -} -.icons-16-5 { - background-position: -128px -480px; -} -.icons-16-6 { - background-position: -160px -480px; -} -.icons-16-7 { - background-position: -192px -480px; -} -.icons-16-8 { - background-position: -224px -480px; -} -.icons-16-9 { - background-position: -256px -480px; -} -.icons-16-10 { - background-position: -288px -480px; -} -.icons-16-11 { - background-position: -320px -480px; -} -.icons-16-12 { - background-position: -352px -480px; -} -.icons-16-13 { - background-position: -384px -480px; -} -.icons-16-14 { - background-position: -416px -480px; -} -.icons-16-15 { - background-position: -448px -480px; -} -.icons-16-16 { - background-position: -480px -480px; -} -.icons-16-17 { - background-position: -512px -480px; -} -.icons-16-18 { - background-position: -548px -480px; -} -.icons-16-19 { - background-position: -580px -480px; -} -.icons-16-20 { - background-position: -612px -480px; -} -.icons-16-21 { - background-position: -640px -480px; -} -.icons-16-22 { - background-position: -672px -480px; -} -/*17*/ -.icons- { - background-position: -0px -512px; -} -/*18*/ -.icons-help { - background-position: -160px -544px; -} -.icons- { - background-position: -0px -544px; -} -/*19*/ -.icons-plus-cube { - background-position: -192px -576px; -} -.icons-plus { - background-position: -288px -576px; -} -/*20*/ -.icons-power { - background-position: -0px -608px; -} -.icons-output { - background-position: -32px -608px; -} -.icons-col-resize { - background-position: -64px -608px; -} -.icons-move { - background-position: -96px -608px; -} -.icons-size-out { - background-position: -128px -608px; -} -.icons-size-in { - background-position: -160px -608px; -} -.icons-slash { - background-position: -192px -608px; -} -.icons-level { - background-position: -224px -608px; -} -.icons-share { - background-position: -256px -608px; -} -.icons-share2 { - background-position: -288px -608px; -} -.icons-re { - background-position: -320px -608px; -} -.icons-insert { - background-position: -352px -608px; -} -.icons-insert2 { - background-position: -384px -608px; -} -.icons-download { - background-position: -416px -608px; -} -.icons-tag-rignt { - background-position: -448px -608px; -} -.icons-tag-top { - background-position: -480px -608px; -} -.icons-tag-bottom { - background-position: -512px -608px; -} -.icons-tag-left { - background-position: -544px -608px; -} -.icons-moves { - background-position: -576px -608px; -} -/*21*/ -.icons- { - background-position: -0px -640px; -} +} \ No newline at end of file diff --git a/app/assets/stylesheets/templatestore.css.erb b/app/assets/stylesheets/templatestore.css.erb new file mode 100644 index 000000000..4ebb750a2 --- /dev/null +++ b/app/assets/stylesheets/templatestore.css.erb @@ -0,0 +1,170 @@ +ul, li{ + margin: 0; + list-style: none; +} +body{ + color: #000; + font-family: helvetica, arial, sans-serif; +} +.tp-store{ + margin: 0 40px; + min-width: 780px; +} +.home{ + margin: 39px 0 0 18px; + background: url(<%= asset_path 'templatestore/h1_bg.png' %>) left top no-repeat; + width: 195px; + height: 42px; + display: block; +} +.home:hover{ + -moz-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + transition: all 0.1s ease-in-out; + opacity: .85; +} +.home:active{ + position: relative; + top: 1px; +} +.home a{ + text-indent: -9999px; + display: block; +} +.header{ + margin-bottom: 35px; +} + +.template-list a{ + width: 200px; + height: 200px; + overflow: hidden; + display: block; + background: #00699f; + position: relative; + margin: 0 0 40px 0; + -webkit-box-shadow: 0px 2px 10px 0px #a3a3a3; + box-shadow: 0px 2px 10px 0px #a3a3a3; +} +.template-list .detail{ + background: #f0f0f0; + position: absolute; + width: 180px; + bottom: 0; + left: 0; + padding: 10px 10px 5px 10px; +} +.template-list .detail .template-title{ + display: block; + font-size: 13px; + margin-bottom: 2px; +} +.template-list .detail .template-title:hover{ + text-decoration: underline; +} +.template-list .detail .template-title:active{ + position: relative; + top: 1px; +} + +.template-list .detail .price{ + font-size: 12px; + color: #76787a; +} + +/* orbit template detail page*/ +.orbit_template_detail .header{ + margin-bottom: 30px; +} +.breadcrumb{ + background: none; + font-size: 12px; + margin: 10px 0 0 0; + padding: 0; + font-style: italic; +} +.left-col.span3{ + width: 170px; +} +.template-icon{ + border: 1px solid #ddd; + margin: 0 0 5px 0; +} +.price.btn.btn-primary{ + margin: 0 0 5px 10px; +} +.views{ + font-size: 12px; + color: #363636; +} +.views span{ + color: #727272; +} +.view-meta{ + margin-left: 17px; +} +.view-meta ul li{ + font-size: 11px; + padding-left: 5px; +} +.right-col.span6{ + width: 530px; +} +.right-col h2{ + font-size: 24px; + color: #3e94e4; + font-weight: 100; + line-height: 28px; +} +.right-col h3{ + color: #363636; + font-size: 15px; + font-weight: 100; + margin: 8px 0; + line-height: 20px; +} +.template-description{ + color: #5d5d5d; + font-size: 12px; +} + +.screenshots .slide{ + width: 580px; + height: 360px; +} +.detail-slide-nav { + text-align: center; + z-index: 50; + position: absolute; + bottom: 0; + left: 0; + background: #000000; + opacity: .75; + width: 580px; + line-height: 20px; +} +.detail-slide-nav a{ + color: #fff; + background: #fff; + margin: 0 7px 0 0; + -webkit-border-radius: 5px; + border-radius: 5px; + height: 10px; + width: 10px; + display: inline-block; + overflow: hidden; +} +.detail-slide-nav a:hover{ + color: #4bbaf3; + background: #4bbaf3; + text-decoration: none; +} +.detail-slide-nav a.activeSlide { + background: #4bbaf3; + color: #4bbaf3; +} +.detail-slide-nav a:focus { + outline: none; +} + diff --git a/app/controllers/admin/.designs_controller.rb.swp b/app/controllers/admin/.designs_controller.rb.swp deleted file mode 100644 index 5131583d8..000000000 Binary files a/app/controllers/admin/.designs_controller.rb.swp and /dev/null differ diff --git a/app/controllers/admin/designs_controller.rb b/app/controllers/admin/designs_controller.rb index a3824950a..913520fa8 100644 --- a/app/controllers/admin/designs_controller.rb +++ b/app/controllers/admin/designs_controller.rb @@ -101,7 +101,6 @@ class Admin::DesignsController < OrbitBackendController def create @design = Design.new(params[:design]) if @design.save - flash[:notice] = "Successfully created design and tasks." redirect_to admin_designs_url else render :action => 'new' diff --git a/app/controllers/admin/module_store_controller.rb b/app/controllers/admin/module_store_controller.rb new file mode 100644 index 000000000..263a07327 --- /dev/null +++ b/app/controllers/admin/module_store_controller.rb @@ -0,0 +1,11 @@ +class Admin::ModuleStoreController < ApplicationController + + layout "new_admin" + + def index + end + + def show + end + +end \ No newline at end of file diff --git a/app/controllers/admin/purchases_controller.rb b/app/controllers/admin/purchases_controller.rb index b259c12ff..f4d1ae2a2 100644 --- a/app/controllers/admin/purchases_controller.rb +++ b/app/controllers/admin/purchases_controller.rb @@ -3,7 +3,7 @@ class Admin::PurchasesController < ApplicationController require "uri" require 'zip/zip' - layout "admin" + layout "new_admin" def index @purchases = Purchase.all.entries @@ -112,7 +112,7 @@ class Admin::PurchasesController < ApplicationController log = Logger.new(STDOUT) log.level = Logger::WARN - log.warn("App unzip procress is finished,please restart the server to apply effect") + log.warn(t(:unzip_app)) #TODO Perform touch tmp/restart to restart in production env end @@ -159,7 +159,7 @@ class Admin::PurchasesController < ApplicationController log = Logger.new(STDOUT) log.level = Logger::WARN - log.warn("App unzip procress is finished,please restart the server to apply effect") + log.warn(t(:unzip_app)) } temp_file.close diff --git a/app/controllers/admin/template_store_controller.rb b/app/controllers/admin/template_store_controller.rb new file mode 100644 index 000000000..cdda6ff90 --- /dev/null +++ b/app/controllers/admin/template_store_controller.rb @@ -0,0 +1,11 @@ +class Admin::TemplateStoreController < ApplicationController + + layout "new_admin" + + def index + end + + def show + end + +end \ No newline at end of file diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb deleted file mode 100644 index e0c8a8f9b..000000000 --- a/app/controllers/admin/users_controller.rb +++ /dev/null @@ -1,78 +0,0 @@ -class Admin::UsersController < ApplicationController - - layout "admin" - before_filter :authenticate_user! - before_filter :set_attribute, :only => [:index, :show, :new, :edit] - - def index - @users = User.all.entries - end - - def show - @user = User.find(params[:id]) - get_info_and_roles - end - - def new - @user = User.new - get_info_and_roles - end - - def create - puts params.to_yaml - @user = User.new(params[:user]) - if @user.save - flash[:notice] = t('create.success.user') - redirect_to :action => :index - else - render :action => :new - end - end - - def edit - @user = User.find(params[:id]) - get_info_and_roles - end - - def update - @user = User.find(params[:id]) - - # Update changes to the avatar - @user.remove_avatar! if params[:file] - @user.avatar = params[:file] if params[:file] - - if @user.id.to_s.eql?(session['warden.user.user.key'][1].to_s) && @user.admin != params[:user][:admin].to_i.to_b - flash.now[:error] = t(:cant_revoke_self_admin) - end - if !flash[:error] && @user.update_attributes(params[:user]) - flash[:notice] = t('update.success.user') - redirect_to :action => :index - else - get_info_and_roles - render :action => :edit - end - end - - def destroy - if params[:id].eql?(session['warden.user.user.key'][1].to_s) - flash[:error] = t(:cant_delete_self) - else - @user = User.find(params[:id]) - @user.destroy - end - - redirect_to :action => :index - end - - protected - - def get_info_and_roles - @infos = Info.excludes('disabled' => true) - @roles = Role.excludes('disabled' => true) - end - - def set_attribute - @class = 'users' - end - -end diff --git a/app/controllers/desktop/co_author_relations_controller.rb b/app/controllers/desktop/co_author_relations_controller.rb new file mode 100644 index 000000000..f35391dd3 --- /dev/null +++ b/app/controllers/desktop/co_author_relations_controller.rb @@ -0,0 +1,33 @@ +class Desktop::CoAuthorRelationsController < ApplicationController + def index + @co_author_relations = CoAuthorRelation.all + new + + respond_to do |format| + format.html {render layout: false } + end + end + + def new + @new_relation = CoAuthorRelation.new + end + + def create + @new_relation = CoAuthorRelation.new(params[:co_author_relation]) + + if @new_relation.save + newv = render_to_string :partial=>"show_form", :object=>@new_relation + render json: {success:true, msg: "New Relation successfully saved!","newvalue"=>newv}.to_json + else + error_msg = @new_relation.errors.full_messages.join("
") + render json: {success: false, msg: error_msg}.to_json + end + end + + def destroy + @co_author_relation = CoAuthorRelation.find(params[:id]) + @co_author_relation.destroy + + render :json => {success: true, msg: "deleted successfully!"} + end +end diff --git a/app/controllers/desktop/co_authors_controller.rb b/app/controllers/desktop/co_authors_controller.rb index 2ea928bc2..c027a162c 100644 --- a/app/controllers/desktop/co_authors_controller.rb +++ b/app/controllers/desktop/co_authors_controller.rb @@ -1,10 +1,10 @@ class Desktop::CoAuthorsController < ApplicationController def index @co_authors = CoAuthor.where(name_id: current_user.id) + @co_author_relations = CoAuthorRelation.all respond_to do |format| format.html { render :layout => false} - format.json { render json: @co_authors } end end @@ -19,6 +19,7 @@ class Desktop::CoAuthorsController < ApplicationController def new @co_author = CoAuthor.new + @co_author_relations = CoAuthorRelation.all respond_to do |format| format.html { render :layout => false} @@ -27,6 +28,7 @@ class Desktop::CoAuthorsController < ApplicationController def edit @co_author = CoAuthor.find(params[:id]) + @co_author_relations = CoAuthorRelation.all respond_to do |format| format.html { render :layout => false} end @@ -37,9 +39,10 @@ class Desktop::CoAuthorsController < ApplicationController @co_author.name_id= current_user.id if @co_author.save - render json: {success:true, msg: "Co-author successfully saved!"}.to_json + render json: {success:true, msg: t('create.sucess.co_author')}.to_json else - render json: {success: false, msg: @co_author.errors.full_messages}.to_json + error_msg = @co_author.errors.full_messages.join("
") + render json: {success: false, msg: error_msg}.to_json end end @@ -47,33 +50,17 @@ class Desktop::CoAuthorsController < ApplicationController @co_author = CoAuthor.find(params[:id]) if @co_author.update_attributes(params[:co_author]) - render json: {success:true, msg: "Co-author successfully update!"}.to_json + render json: {success:true, msg: t('update.sucess.co_author')}.to_json else - render json: {success: false, msg: @co_author.errors.full_messages}.to_json + error_msg = @co_author.errors.full_messages.join("
") + render json: {success: false, msg: error_msg}.to_json end end - def delete + def destroy @co_author = CoAuthor.find(params[:id]) @co_author.destroy - #respond_to do |format| - # format.html { redirect_to desktop_co_authors_url, :layout => false } - # format.json { head :no_content } - #end - end - - def get_co_authors_json - @co_authors = CoAuthor.where(name_id: current_user.id) - data = Array.new - - @co_authors.each do |co_author| - data << { - author: co_author.co_author, - email: co_author.email, - type: co_author.type - } - end - render json: JSON.pretty_generate(data) + render :json => {success: true, msg: "Co-author deleted successfully!"} end end diff --git a/app/controllers/desktop/journal_lists_controller.rb b/app/controllers/desktop/journal_lists_controller.rb new file mode 100644 index 000000000..8605b47d5 --- /dev/null +++ b/app/controllers/desktop/journal_lists_controller.rb @@ -0,0 +1,20 @@ +class Desktop::JournalListsController < ApplicationController + + def index + level_types = JournalLevelType.all + all_journal_lists = WritingJournal.where(create_user_id: current_user.id) + all_journal_lists = all_journal_lists.map do |j| + [ j.journal_title, + j.journal_level_type_ids.map do |type| + level_types.find(type).title + end.join(",") + ].join(" -- ") + end + + @journal_lists = all_journal_lists.uniq + + respond_to do |format| + format.html { render :layout => false} + end + end +end diff --git a/app/controllers/desktop/journal_pages_controller.rb b/app/controllers/desktop/journal_pages_controller.rb index 6288cdbfc..5775be0a4 100644 --- a/app/controllers/desktop/journal_pages_controller.rb +++ b/app/controllers/desktop/journal_pages_controller.rb @@ -18,6 +18,10 @@ class Desktop::JournalPagesController < ApplicationController @level_types = JournalLevelType.all @author_types = JournalAuthorType.all @paper_types= JournalPaperType.all + @co_author_candidate = + CoAuthor.where(name_id: current_user.id).map{|c|c.co_author} + @journal_candidate = + WritingJournal.where(create_user_id: current_user.id).map{|j|j.journal_title}.uniq respond_to do |format| format.html { render :layout => false} @@ -26,7 +30,7 @@ class Desktop::JournalPagesController < ApplicationController end def edit - @writing_journal= WritingJournal.find(params[:id]) + @writing_journal = WritingJournal.find(params[:id]) @level_types = JournalLevelType.all @author_types = JournalAuthorType.all @paper_types= JournalPaperType.all @@ -40,40 +44,28 @@ class Desktop::JournalPagesController < ApplicationController @writing_journal = WritingJournal.new(params[:writing_journal]) if @writing_journal.save - render json: {success: true, msg: "Paper successfully saved!"}.to_json + render json: {success: true, msg: t('create.success.paper')}.to_json else - render json: {success: false, msg: @writing_journal.errors.full_messages}.to_json + error_msg = @writing_journal.errors.full_messages.join("
") + render json: {success: false, msg: error_msg}.to_json end end def update params[:writing_journal][:update_user_id] = current_user.id @writing_journal= WritingJournal.find(params[:id]) - respond_to do |format| - if @writing_journal.update_attributes(params[:writing_journal]) - render json: {success: true, msg: "Paper successfully saved!"}.to_json - else - render json: {success: false, msg: @writing_journal.errors.full_messages}.to_json - end + + if @writing_journal.update_attributes(params[:writing_journal]) + render json: {success: true, msg: t('update.success.paper')}.to_json + else + error_msg = @writing_journal.errors.full_messages.join("
") + render json: {success: false, msg: error_msg}.to_json end end def check_file_type file if not file.nil? file_type = MIME::Types.type_for(file).first.to_s.split("/")[1] - - # case file_type - # when "jpg", "jpeg" - # type = "jpg" - # when "text", "txt" - # type = "txt" - # when "pdf" - # type = "pdf" - # when "png" - # type = "png" - # else "readme" - # end - file_type = "/assets/ft-icons/#{file_type}/#{file_type}-48_32.png" else file_type = "" @@ -83,7 +75,7 @@ class Desktop::JournalPagesController < ApplicationController def destroy @writing_journal = WritingJournal.find(params[:id]) @writing_journal.destroy - render :json => {success: true, msg: "Paper deleted successfully!"} + render :json => {success: true, msg: t('delete.success.paper')} end def get_journals_json diff --git a/app/controllers/desktop/registrations_controller.rb b/app/controllers/desktop/registrations_controller.rb new file mode 100644 index 000000000..676bfe8ea --- /dev/null +++ b/app/controllers/desktop/registrations_controller.rb @@ -0,0 +1,15 @@ +class Desktop::RegistrationsController < Devise::RegistrationsController + def update + self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key) + + if resource.update_with_password(params[resource_name]) + set_flash_message :notice, :updated if is_navigational_format? + sign_in resource_name, resource, :bypass => true + render json: {success:true, msg: "Password successfully update!"}.to_json + else + clean_up_passwords(resource) + error_msg = resource.errors.full_messages.join("
") + render :json => {success: false, msg: error_msg}.to_json + end + end +end diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 4c3084dd2..6e00b859f 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -10,7 +10,7 @@ class PagesController < ApplicationController impressionist(@item) render_page else - render :text => 'You need a home page' + render :text => t(:need_home) end end diff --git a/app/helpers/admin/items_helper.rb b/app/helpers/admin/items_helper.rb index 2f46b15fa..948df59c1 100644 --- a/app/helpers/admin/items_helper.rb +++ b/app/helpers/admin/items_helper.rb @@ -12,13 +12,13 @@ module Admin::ItemsHelper end ret << "
  • " # ret << "" - ret << "
    " + ret << "
    " ret << (link_to node.title, dest, :class => 'js_history') ret << "
    " ret << (link_to t(:edit), eval("edit_admin_#{node.class.to_s.downcase}_path(node)"), :class => 'js_history') if node.class.to_s.eql?('Page') ret << (link_to t('new.page'), new_admin_page_path(:parent_id => node.id), :class => 'new_page js_history') if node.class.to_s.eql?('Page') ret << (link_to t('new.link'), new_admin_link_path(:parent_id => node.id), :class => 'new_link js_history') if node.class.to_s.eql?('Page') - ret << (link_to t(:delete), eval("delete_admin_#{node.class.to_s.downcase}_path(node, :authenticity_token => form_authenticity_token)"), :confirm => t('sure?'), :class => 'delete js_history') + ret << (link_to t(:delete_), eval("delete_admin_#{node.class.to_s.downcase}_path(node, :authenticity_token => form_authenticity_token)"), :confirm => t('sure?'), :class => 'delete js_history') ret << "
    " ret << "
    " ret << render_children(node) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4ad52a40f..068f6ab7a 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -44,13 +44,6 @@ module ApplicationHelper User.find(session[:guest_user_id].nil? ? session[:guest_user_id] = create_guest_user.id : session[:guest_user_id]) end - - - - def colorize_in_use_locale(locale) - @site_in_use_locales.include?(locale)? 'green' : 'red' - end - def flash_messages return unless messages = flash.keys.select{|k| FLASH_NOTICE_KEYS.include?(k)} formatted_messages = messages.map do |type| @@ -183,6 +176,7 @@ module ApplicationHelper unless edit stylesheets << "\n" stylesheets << "\n" + stylesheets << "\n" end stylesheets << "\n" if page.design.css_reset stylesheets << "\n" diff --git a/app/helpers/attribute_fields_helper.rb b/app/helpers/attribute_fields_helper.rb index 270a55168..2705dc8fc 100644 --- a/app/helpers/attribute_fields_helper.rb +++ b/app/helpers/attribute_fields_helper.rb @@ -228,7 +228,7 @@ protected temp_field_name = get_basic_field_name_base + '[temp]' add_more = content_tag :div,:class=> 'controls' do content_tag :span,:class=> 'help-block' do - content = link_to (content_tag :i,I18n.t("admin.infos.add"),:class=>"icon-plus-sign"),"#",:class=>'addinput' + content = link_to (content_tag :i,I18n.t(:add),:class=>"icon-plus-sign"),"#",:class=>'addinput' content << hidden_field_tag("#{temp_field_name}[count]",@attribute_value.add_more_counter ,:class=>"list_count") content << hidden_field_tag("#{temp_field_name}[count]",get_basic_field_name_base,:class=>"field_name") content diff --git a/app/helpers/attribute_values_helper.rb b/app/helpers/attribute_values_helper.rb index eede44fb3..2bc314324 100644 --- a/app/helpers/attribute_values_helper.rb +++ b/app/helpers/attribute_values_helper.rb @@ -33,7 +33,7 @@ module AttributeValuesHelper end year_str = "" unless date.year == 1912 - m_year = (date.year - 1912).abs.to_s + I18n.t("admin.infos.date.minguo_calendar.year") + m_year = (date.year - 1912).abs.to_s + I18n.t("date.minguo_calendar.year") year_str = minguo_format_year(m_year) end get_minguo_year + minguo_m_y_d_time @@ -42,15 +42,15 @@ module AttributeValuesHelper def get_minguo_year date = get_date m_year = (date.year - 1911).abs - year_end = I18n.t("admin.infos.date.minguo_calendar.year") + year_end = I18n.t("date.minguo_calendar.year") case when date.year <1912 - I18n.t("admin.infos.date.minguo_calendar.before") + (m_year+1).to_s + year_end + I18n.t("date.minguo_calendar.before") + (m_year+1).to_s + year_end when date.year ==1912 - I18n.t("admin.infos.date.minguo_calendar.first_year") + I18n.t("date.minguo_calendar.first_year") when date.year >1912 - I18n.t("admin.infos.date.minguo_calendar.after")+ (m_year).to_s + year_end - end # of case tw_claendar year + I18n.t("date.minguo_calendar.after")+ (m_year).to_s + year_end + end # of case tw_calendar year end def minguo_m_y_d_time @@ -61,7 +61,7 @@ module AttributeValuesHelper when 'format2' # Y/M/D date.strftime(" %m/%d") when 'format3' # Y/M - date.strftime(" %m#{I18n.t("admin.infos.date.minguo_calendar.month")}") + date.strftime(" %m#{I18n.t("date.minguo_calendar.month")}") when 'format4' # Y '' end # of case @@ -71,11 +71,11 @@ module AttributeValuesHelper case I18n.locale when :zh_tw case - when self.attribute_field["typeC"]["claendar"] == "west_claendar" + when self.attribute_field["typeC"]["calendar"] == "west_calendar" show_west_calender(from_to) - when self.attribute_field["typeC"]["claendar"] == "tw_claendar" + when self.attribute_field["typeC"]["calendar"] == "tw_calendar" show_minguo_calendar(from_to) - end #case self.attribute_field["typeC"]["claendar"] + end #case self.attribute_field["typeC"]["calendar"] when :en show_west_calender(from_to) end diff --git a/app/helpers/desktop/co_author_relations_helper.rb b/app/helpers/desktop/co_author_relations_helper.rb new file mode 100644 index 000000000..fa03bbae6 --- /dev/null +++ b/app/helpers/desktop/co_author_relations_helper.rb @@ -0,0 +1,2 @@ +module Desktop::CoAuthorRelationsHelper +end diff --git a/app/helpers/desktop/journal_lists_helper.rb b/app/helpers/desktop/journal_lists_helper.rb new file mode 100644 index 000000000..e21dc09f3 --- /dev/null +++ b/app/helpers/desktop/journal_lists_helper.rb @@ -0,0 +1,2 @@ +module Desktop::JournalListsHelper +end diff --git a/app/models/.user.rb.swp b/app/models/.user.rb.swp deleted file mode 100644 index 7149c0ea4..000000000 Binary files a/app/models/.user.rb.swp and /dev/null differ diff --git a/app/models/design/layout.rb b/app/models/design/layout.rb index a782894df..817ebc5e0 100644 --- a/app/models/design/layout.rb +++ b/app/models/design/layout.rb @@ -10,6 +10,7 @@ class Layout < DesignFile embeds_many :layout_parts before_save :parse_layout + after_save :save_pages def content self.file.read.force_encoding("UTF-8") rescue '' @@ -24,5 +25,9 @@ class Layout < DesignFile self.body = html.at_css("body").inner_html parse_body(self) end + + def save_pages + self.design.pages.each(&:generate_parts) + end end diff --git a/app/models/page.rb b/app/models/page.rb index bee0700b6..f6e95a035 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -26,6 +26,15 @@ class Page < Item # embeds_many :custom_images, :class_name => 'Image', as: :design_image + def generate_parts + page_design = self.design + page_design.layout.layout_parts.each do |layout_part| + current_part = self.page_parts.detect{|page_part| page_part.name.eql?(layout_part.name)} + current_part = self.page_parts.build(:name => layout_part.name) unless current_part + current_part.save if current_part.new_record? + end + end + protected def create_parts diff --git a/app/models/user/attribute_field.rb b/app/models/user/attribute_field.rb index 76ee93948..c0aabb9c5 100644 --- a/app/models/user/attribute_field.rb +++ b/app/models/user/attribute_field.rb @@ -12,7 +12,7 @@ class AttributeField field :to_delete,:type=> Boolean,:default => false field :typeA,:type=> Hash,:default=>{:cross_lang=>false} field :typeB,:type=> Hash,:default=>{} - field :typeC,:type=> Hash,:default=>{:claendar=>"west_claendar",:format=>"format3"} + field :typeC,:type=> Hash,:default=>{:calendar=>"west_calendar",:format=>"format3"} field :typeD,:type=> Hash,:default=>{:cross_lang=>false} field :typeE,:type=> Hash,:default=>{} field :title, localize: true diff --git a/app/models/user/co_author.rb b/app/models/user/co_author.rb index ab7c75a5b..4c662acb8 100644 --- a/app/models/user/co_author.rb +++ b/app/models/user/co_author.rb @@ -6,14 +6,15 @@ class CoAuthor field :name_id, type: BSON::ObjectId field :co_author, localize: true field :email - field :type + belongs_to :co_author_relations - VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i + VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/ validates :email, format: { with: VALID_EMAIL_REGEX }, - uniqueness: { case_sensitive: false } + allow_blank: true, + uniqueness: { case_sensitive: false } validates :co_author, presence: true - before_save { |coauthor| coauthor.email = email.downcase } + before_save { |coauthor| coauthor.email = email.downcase if not coauthor.email.nil?} end diff --git a/app/models/user/co_author_relation.rb b/app/models/user/co_author_relation.rb new file mode 100644 index 000000000..f0d5f17c3 --- /dev/null +++ b/app/models/user/co_author_relation.rb @@ -0,0 +1,11 @@ +class CoAuthorRelation + include Mongoid::Document + include Mongoid::Timestamps + + field :relation, localize: true + + has_and_belongs_to_many :co_authors + + validates :relation, presence: true, + uniqueness: { case_sensitive: false } +end diff --git a/app/models/user/user.rb b/app/models/user/user.rb index 0adf46910..42254d103 100644 --- a/app/models/user/user.rb +++ b/app/models/user/user.rb @@ -3,7 +3,7 @@ class User include Mongoid::Document include Mongoid::Timestamps - devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable + devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable, :validatable, :timeoutable mount_uploader :avatar, AvatarUploader @@ -194,4 +194,4 @@ class User end end -end \ No newline at end of file +end diff --git a/app/views/.swp b/app/views/.swp deleted file mode 100644 index a9dcf2b18..000000000 Binary files a/app/views/.swp and /dev/null differ diff --git a/app/views/admin/ad_banners/_ad_banner_tab.html.erb b/app/views/admin/ad_banners/_ad_banner_tab.html.erb index 561609315..ac5c1ae0e 100644 --- a/app/views/admin/ad_banners/_ad_banner_tab.html.erb +++ b/app/views/admin/ad_banners/_ad_banner_tab.html.erb @@ -22,7 +22,7 @@ <%if (at_least_module_manager || ad_banner_tab.cur_user_is_sub_manager_of(:edit) )%> <%= content_tag :div ,:class=>'adbanner-action' do%> <%= link_to t("ad.new_image"),new_admin_ad_banner_ad_image_path(ad_banner_tab) ,:class => "btn btn-primary"%> - <%= link_to t("modal.preview"), admin_realtime_preview_ad_banner_path(ad_banner_tab.id) , :class=>'preview_trigger btn btn-success'%> + <%= link_to t(:preview), admin_realtime_preview_ad_banner_path(ad_banner_tab.id) , :class=>'preview_trigger btn btn-success'%> <% end -%> <% end -%>
      @@ -30,7 +30,7 @@
    <% if at_least_module_manager %> <%= show_ad_banner_permission_link ad_banner_tab%> - <%= link_to t(:delete),admin_ad_banner_path(ad_banner_tab),:class => 'btn',:method => :delete,:confirm => t('sure?') %> + <%= link_to t(:delete_),admin_ad_banner_path(ad_banner_tab),:class => 'btn',:method => :delete,:confirm => t('sure?') %> <% end -%> <%#= render :partial => 'new_add_banner_file', :object => ad_banner_tab.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %> diff --git a/app/views/admin/ad_banners/_ad_image_update.html.erb b/app/views/admin/ad_banners/_ad_image_update.html.erb index 15bb75d01..281d07538 100644 --- a/app/views/admin/ad_banners/_ad_image_update.html.erb +++ b/app/views/admin/ad_banners/_ad_image_update.html.erb @@ -7,7 +7,7 @@ <%if at_least_module_manager || sub_manager?(ad_image.ad_banner) %>

    <%= link_to t('edit'),edit_admin_ad_banner_ad_image_path(ad_banner,ad_image),:class => 'btn btn-primary' %> - <%= link_to t('delete'),admin_ad_banner_ad_image_path(ad_banner,ad_image),:class => 'btn',:method => :delete,:confirm => t('sure?') %> + <%= link_to t(:delete_),admin_ad_banner_ad_image_path(ad_banner,ad_image),:class => 'btn',:method => :delete,:confirm => t('sure?') %>

    <% end -%>
  • \ No newline at end of file diff --git a/app/views/admin/ad_banners/_modal_ad_banner_form.html.erb b/app/views/admin/ad_banners/_modal_ad_banner_form.html.erb index dc77bc5f4..dc35a7044 100644 --- a/app/views/admin/ad_banners/_modal_ad_banner_form.html.erb +++ b/app/views/admin/ad_banners/_modal_ad_banner_form.html.erb @@ -25,7 +25,7 @@
    <%= f.label :best_size, t('ad.best_size'),:class => "control-label" %>
    - <%= f.text_field :best_size %> Ex: 500px x 300px + <%= f.text_field :best_size %> <%= t('ad.best_size_example') %>
    diff --git a/app/views/admin/ad_banners/_modal_preview.html.erb b/app/views/admin/ad_banners/_modal_preview.html.erb index 3dc985216..adf84adb8 100644 --- a/app/views/admin/ad_banners/_modal_preview.html.erb +++ b/app/views/admin/ad_banners/_modal_preview.html.erb @@ -3,7 +3,7 @@