diff --git a/app/assets/fonts/entypo.eot b/app/assets/fonts/entypo.eot new file mode 100644 index 00000000..56d104e9 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 00000000..01ff749d --- /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 00000000..0a114e0a 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 00000000..57cf5b47 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 00000000..711f0481 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 00000000..66795882 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 00000000..ee38685f 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 00000000..3bbc5a67 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 00000000..e48bf90f 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 00000000..c413594c 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 00000000..e312ed92 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 00000000..df81ea5d 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 00000000..52475c04 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 00000000..fc562e95 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 00000000..c9837583 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 00000000..b0a9c642 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 00000000..fd11b777 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 00000000..5231eeda 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 00000000..eb9f8eb9 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 00000000..b8f1f01b 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 00000000..fc562e95 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 00000000..c9837583 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 00000000..b0a9c642 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 00000000..fd11b777 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 00000000..5231eeda 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 00000000..7dca3b02 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 00000000..76fb1064 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 f2cdab80..44d3bc9c 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); }) 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 00000000..75d7ab98 --- /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 00000000..bd156264 --- /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(){ @@ -241,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 @@ -623,6 +660,8 @@ var orbitDesktop = function(dom){ }; this.initializeSettings = function(target,url,cache){ //this is to initialize setting page + this.initializeSettings.account = function(){} + 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/icons.css.erb b/app/assets/stylesheets/icons.css.erb new file mode 100644 index 00000000..d71b7cf9 --- /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 00000000..ef265aeb --- /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 8d1e8a8b..a634fb42 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 adde331e..38441260 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/style.css.erb b/app/assets/stylesheets/style.css.erb index 6a496370..00ee8e0a 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 00000000..4ebb750a --- /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/module_store_controller.rb b/app/controllers/admin/module_store_controller.rb new file mode 100644 index 00000000..263a0732 --- /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 b259c12f..116d18f3 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 diff --git a/app/controllers/admin/template_store_controller.rb b/app/controllers/admin/template_store_controller.rb new file mode 100644 index 00000000..cdda6ff9 --- /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/desktop/journal_pages_controller.rb b/app/controllers/desktop/journal_pages_controller.rb index 69334a5b..21121e57 100644 --- a/app/controllers/desktop/journal_pages_controller.rb +++ b/app/controllers/desktop/journal_pages_controller.rb @@ -54,13 +54,12 @@ class Desktop::JournalPagesController < ApplicationController 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 - error_msg = @writing_journal.errors.full_messages.join("
") - render json: {success: false, msg: error_msg}.to_json - end + + if @writing_journal.update_attributes(params[:writing_journal]) + render json: {success: true, msg: "Paper successfully saved!"}.to_json + else + error_msg = @writing_journal.errors.full_messages.join("
") + render json: {success: false, msg: error_msg}.to_json end end diff --git a/app/controllers/desktop/registrations_controller.rb b/app/controllers/desktop/registrations_controller.rb new file mode 100644 index 00000000..676bfe8e --- /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/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4ad52a40..6f6bd13b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -183,6 +183,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/models/user/co_author.rb b/app/models/user/co_author.rb index ab7c75a5..f85d7839 100644 --- a/app/models/user/co_author.rb +++ b/app/models/user/co_author.rb @@ -9,11 +9,12 @@ class CoAuthor field :type - 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 }, + 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/views/admin/ad_images/_form.html.erb b/app/views/admin/ad_images/_form.html.erb index 008421bc..413ccbf4 100644 --- a/app/views/admin/ad_images/_form.html.erb +++ b/app/views/admin/ad_images/_form.html.erb @@ -19,7 +19,7 @@
-

<%= t('nccu.date') %>

+

<%= t('nccu.date') %>

@@ -73,7 +73,7 @@
-

<%= t('nccu.picture') %>

+

<%= t('nccu.picture') %>

@@ -101,7 +101,7 @@
-

<%= t(:type) %>

+

<%= t(:type) %>

<%= f.select :link_open ,AdImage::LINK_OPEN_TYPES%>
@@ -111,7 +111,7 @@
-

<%= t(:frequency) %>

+

<%= t(:frequency) %>

<%= f.text_field :weight ,:class=> 'span3',:placeholder=>"在套圖中出現次數 1次請輸入1" %>
@@ -121,7 +121,7 @@
-

<%= t(:link) %>

+

<%= t(:link) %>

<%= f.text_field :out_link ,:class=> 'span3',:placeholder => "輸入連結"%>
diff --git a/app/views/admin/assets/_asset.html.erb b/app/views/admin/assets/_asset.html.erb index 3040f872..c67ade0e 100644 --- a/app/views/admin/assets/_asset.html.erb +++ b/app/views/admin/assets/_asset.html.erb @@ -2,7 +2,7 @@ <%= check_box_tag 'to_delete[]', asset.id, false, :class => "checkbox_in_list" %> <%= asset.title rescue nil %> - +
@@ -213,5 +237,22 @@ +<%= javascript_include_tag "archive_plugin_form" %> + diff --git a/app/views/desktop/journal_pages/_form_file.html.erb b/app/views/desktop/journal_pages/_form_file.html.erb new file mode 100644 index 00000000..afba08b7 --- /dev/null +++ b/app/views/desktop/journal_pages/_form_file.html.erb @@ -0,0 +1,23 @@ +" class="list_item"> + +
+ <%= f.file_field :file, class: "s_grid_1 s_grid" %> + <%= form_file.file.file ? ( link_to t(:view), form_file.file.url, {:class => 'btn s_grid_1 s_grid', :target => '_blank', :title => t(:view)} ) : '' %> +
+ + + <%= f.text_field :title, :class=>'s_grid_1 s_grid' %> + + + + + <% if form_file.new_record? %> + + <% else %> + <%= f.hidden_field :id %> + + <%= f.hidden_field :should_destroy, :value => nil, :class => 'should_destroy' %> + <% end %> + + + diff --git a/app/views/desktop/settings.html.erb b/app/views/desktop/settings.html.erb index df754325..590f4e89 100644 --- a/app/views/desktop/settings.html.erb +++ b/app/views/desktop/settings.html.erb @@ -1,26 +1,26 @@
-
- -
-
- -
-
- -
-
-
+
+ +
+
+ +
+
+ +
+
+
+
-
\ No newline at end of file diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index ff380509..8fcee21a 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -1,25 +1,14 @@ -

Edit <%= resource_name.to_s.humanize %>

-<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> - <%= devise_error_messages! %> +<%= form_for(resource, :as => resource_name, :url => users_passwd_path(resource_name), :html => { :method => :put, "form-type"=>"ajax_form" }) do |f| %> +
<%= f.submit "Update" %>
-
<%= f.label :email %>
- <%= f.email_field :email %>
+
<%= f.label :current_password %> + <%= f.password_field :current_password %>
-
<%= f.label :password %> (leave blank if you don't want to change it)
+
<%= f.label :password %> <%= f.password_field :password %>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %>
-
<%= f.label :current_password %> (we need your current password to confirm your changes)
- <%= f.password_field :current_password %>
- -
<%= f.submit "Update" %>
<% end %> - -

Cancel my account

- -

Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :confirm => "Are you sure?", :method => :delete %>.

- -<%= link_to "Back", :back %> diff --git a/app/views/layouts/_guest_orbit_menu.erb b/app/views/layouts/_guest_orbit_menu.erb index 606cf5fd..636fc7b9 100644 --- a/app/views/layouts/_guest_orbit_menu.erb +++ b/app/views/layouts/_guest_orbit_menu.erb @@ -1,5 +1,5 @@ Orbit \ No newline at end of file diff --git a/app/views/layouts/_member_orbit_menu.erb b/app/views/layouts/_member_orbit_menu.erb index 1ec88b3f..c1d3b23c 100644 --- a/app/views/layouts/_member_orbit_menu.erb +++ b/app/views/layouts/_member_orbit_menu.erb @@ -1,14 +1,14 @@ Orbit
- - <% end %> - -
-
- \ No newline at end of file + +
  • <%= t(:or_lower) %>
  • + <% end %> + + <%#= link_to t(:register), new_user_registration_path, :class => 'btn btn-danger register' %> +
    + + <% end %> + +
    +
    + diff --git a/app/views/layouts/_side_bar.html.erb b/app/views/layouts/_side_bar.html.erb index 32876b9f..dbe73548 100644 --- a/app/views/layouts/_side_bar.html.erb +++ b/app/views/layouts/_side_bar.html.erb @@ -1,6 +1,6 @@
    - <%= link_to content_tag(:i, nil, :class => (local_assigns.has_key? :icon) ? icon : 'icons-dashboard') + content_tag(:span, (local_assigns.has_key? :link_name) ? link_name : t('admin.dashboard')), (local_assigns.has_key? :link_url) ? link_url : admin_dashboards_path %> + <%= link_to content_tag(:i, nil, :class => (local_assigns.has_key? :icon) ? icon : 'icons-gauge') + content_tag(:span, (local_assigns.has_key? :link_name) ? link_name : t('admin.dashboard')), (local_assigns.has_key? :link_url) ? link_url : admin_dashboards_path %>
    diff --git a/app/views/layouts/_side_bar_content.html.erb b/app/views/layouts/_side_bar_content.html.erb index f2656bd1..401e1851 100644 --- a/app/views/layouts/_side_bar_content.html.erb +++ b/app/views/layouts/_side_bar_content.html.erb @@ -7,7 +7,7 @@ <% end %> <%= content_tag :li, :class => (active_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys', 'approvals') || active_for_app_auth('Announcement') || active_for_ob_auths_object("BulletinCategory") ) do -%> - <%= link_to content_tag(:i, nil, :class => 'icons-announcement') + content_tag(:span, t('admin.announcement')), panel_announcement_back_end_bulletins_path %> + <%= link_to content_tag(:i, nil, :class => 'icons-megaphone') + content_tag(:span, t('admin.announcement')), panel_announcement_back_end_bulletins_path %> <%= content_tag :ul, :class => ("nav nav-list " + (visible_for_controllers('bulletins', '/panel/announcement/back_end/tags', 'bulletin_categorys', 'approvals')||active_for_ob_auths_object("BulletinCategory"))) do -%> <%= content_tag :li, link_to((t('announcement.all_articles') + content_tag(:i, nil, :class => 'icon-chevron-right')).html_safe, panel_announcement_back_end_bulletins_path), :class => active_for_action('bulletins', 'index')if (is_manager? rescue nil) %> <%= content_tag :li, link_to((t('announcement.add_new') + content_tag(:i, nil, :class => 'icon-chevron-right')).html_safe, new_panel_announcement_back_end_bulletin_path), :class => active_for_action('bulletins', 'new') if (is_manager? rescue nil) %> @@ -34,7 +34,7 @@ <% end -%> <%= content_tag :li, :class => active_for_controllers('ad_banners', 'ad_images') ||active_for_ob_auths_object("AdBanner") ||active_for_app_auth('ad_banner') do -%> - <%= link_to content_tag(:i, nil, :class => 'icons-link') + content_tag(:span, t('admin.ad_banner')), admin_ad_banners_path %> + <%= link_to content_tag(:i, nil, :class => 'icons-landscape') + content_tag(:span, t('admin.ad_banner')), admin_ad_banners_path %> <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('ad_banners', 'ad_images') ) do -%> <%#= content_tag :li, link_to(t('admin.ad.all_banners'), admin_ad_banners_path), :class => active_for_action('ad_banners', 'index') %> @@ -57,7 +57,7 @@ <% end -%> <%= content_tag :li, :class => active_for_controllers('albums','album_images','gallery_categories','/panel/gallery/back_end/tags') || active_for_app_auth("gallery") do -%> - <%= link_to content_tag(:i, nil, :class => 'icons-picture') + content_tag(:span, t('admin.orbit_gallery')), panel_gallery_back_end_albums_path %> + <%= link_to content_tag(:i, nil, :class => 'icons-pictures') + content_tag(:span, t('admin.orbit_gallery')), panel_gallery_back_end_albums_path %> <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('albums') ) do -%> <%#= content_tag :li, link_to(t('admin.ad.all_banners'), admin_ad_banners_path), :class => active_for_action('ad_banners', 'index') %> <%#= content_tag :li, link_to(t('admin.ad.new_banner'), new_admin_ad_banner_path), :class => active_for_action('ad_banners', 'new') %> @@ -69,7 +69,7 @@ <% end %> <%= content_tag :li, :class => active_for_controllers('archive_files', 'panel/archive/back_end/tags', 'archive_file_categorys') do -%> - <%= link_to content_tag(:i, nil, :class => 'icons-asset') + content_tag(:span, t('admin.archive')), panel_archive_back_end_archive_files_path %> + <%= link_to content_tag(:i, nil, :class => 'icons-archive') + content_tag(:span, t('admin.archive')), panel_archive_back_end_archive_files_path %> <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('archive_files', 'tags', 'archive_file_categorys')) do -%> <%= content_tag :li, link_to((t('admin.all_articles') + content_tag(:i, nil, :class => 'icon-chevron-right')).html_safe, panel_archive_back_end_archive_files_path), :class => active_for_action('archive_file', 'index')if (is_manager? rescue nil) %> <%= content_tag :li, link_to((t('admin.add_new') + content_tag(:i, nil, :class => 'icon-chevron-right')).html_safe, new_panel_archive_back_end_archive_file_path), :class => active_for_action('archive_file', 'new') if (is_admin? rescue nil)%> @@ -90,7 +90,7 @@ <% end -%> <% end %> <%= content_tag :li, :class => active_for_controllers('locations') || active_for_app_auth("gprs") do -%> - <%= link_to content_tag(:i, nil, :class => 'icons-link') + content_tag(:span, t('admin.gprs')), panel_gprs_back_end_locations_path %> + <%= link_to content_tag(:i, nil, :class => 'icons-location') + content_tag(:span, t('admin.gprs')), panel_gprs_back_end_locations_path %> <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('locations') ) do -%> <%#= content_tag :li, link_to(t('admin.ad.all_banners'), admin_ad_banners_path), :class => active_for_action('ad_banners', 'index') %> <%#= content_tag :li, link_to(t('admin.ad.new_banner'), new_admin_ad_banner_path), :class => active_for_action('ad_banners', 'new') %> diff --git a/config/application.rb b/config/application.rb index f0e40fcc..0898a2e6 100644 --- a/config/application.rb +++ b/config/application.rb @@ -68,6 +68,10 @@ module Orbit config.assets.enabled = true #config.time_zone = 'Taipei' ENV['TZ'] = 'Asia/Taipei' + + config.to_prepare do + Devise::RegistrationsController.layout false + end end end Orbit_Apps = [] diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 817f12ea..3264bcd9 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -109,7 +109,6 @@ Devise.setup do |config| # Turn scoped views on. Before rendering "sessions/new", it will first check for # "users/sessions/new". It's turned off by default because it's slower if you # are using only default views. - # config.scoped_views = true # Configure the default scope given to Warden. By default it's the first # devise role declared in your routes. diff --git a/config/routes.rb b/config/routes.rb index 9b584ebe..9cf39f7f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,8 @@ Orbit::Application.routes.draw do - devise_for :users + devise_for :users do + match "/users_passwd" => "desktop/registrations#update", :as => :users_passwd, :via => :put + end + mount Resque::Server, :at => "/admin/resque" # routes for sinatra app @@ -138,6 +141,11 @@ Orbit::Application.routes.draw do match 'member_select_add' => "member_selects#member_select_add" ,:as => :member_select_add,:via => "post" end + match 'module_store' => 'module_store#index' + match 'module_store/show' => 'module_store#show' + match 'template_store' => 'template_store#index' + match 'template_store/show' => 'template_store#show' + end # end admin diff --git a/db/seeds.rb b/db/seeds.rb index 3ecb2b43..00825e32 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -2,6 +2,9 @@ require 'factory_girl' require 'faker' require 'json' +WritingJournal.destroy_all +CoAuthor.destroy_all + data = File.read("db/data") data_json = JSON.parse(data) diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb index 0151d4c0..1802db62 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/back_end/bulletin_categorys_controller.rb @@ -1,6 +1,7 @@ class Panel::Announcement::BackEnd::BulletinCategorysController < OrbitBackendController include OrbitControllerLib::DivisionForDisable - before_filter :for_app_manager,:except => [:index,:get_categorys_json,:get_bulletins_json] + # if someone want to use json format replace with rss, please add :get_bulletins_json to below + before_filter :for_app_manager,:except => [:index,:get_categorys_json] def index @bulletin_categorys = get_categories_for_index("BulletinCategory") @@ -22,7 +23,15 @@ class Panel::Announcement::BackEnd::BulletinCategorysController < OrbitBackendCo categorys.each do |c| data << { category: c.title, - link: "http://#{request.host_with_port}#{panel_announcement_back_end_bulletin_category_get_bulletins_json_path(c)}" + # this is a json format + # link: "http://#{request.host_with_port}#{panel_announcement_back_end_bulletin_category_get_bulletins_json_path(c)}" + # remember to uncommand a rule in route.rb, too + link: "#{url_for( :action => "index", + :controller => "panel/announcement/front_end/bulletins", + :format => :rss, + :only_path => false, + :inner=>true, + :category_id => c )}" } end diff --git a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb index 8fa7af68..456d57d9 100644 --- a/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb +++ b/vendor/built_in_modules/announcement/app/controllers/panel/announcement/front_end/bulletins_controller.rb @@ -1,10 +1,10 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController - + def initialize super @app_title = 'announcement' end - + # GET /bulletins # GET /bulletins.xml def index_bulletins_by_unit @@ -14,14 +14,15 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController end def index - @item = Page.find(params[:page_id]) - - if @item.frontend_data_count - @page_num = @item.frontend_data_count - else - @page_num = 15 - end - @frontend_style = @item.frontend_style + @item = Page.find(params[:page_id]) rescue nil + if @item + if @item.frontend_data_count + @page_num = @item.frontend_data_count + else + @page_num = 15 + end + @frontend_style = @item.frontend_style + end @page = Page.find(params[:page_id]) rescue nil if !params[:search_query].blank? @@ -54,9 +55,9 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController end impressionist(@tag) if @tag end - + end - + def show @page = Page.find(params[:page_id]) rescue nil if params[:preview] == "true" @@ -71,22 +72,22 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController render :text => "
    #{t('sys.can_not_display_due_to_no_context')}
    ".html_safe end else - render :nothing => true, :status => 403 + render :nothing => true, :status => 403 end end end - + def preview_content @bulletin = Bulletin.find params[:id] rescue nil @bulletin = Preview.find(params[:id]).get_virtual_object if @bulletin.nil? get_categorys end - + protected - + def get_categorys @bulletin_categorys = BulletinCategory.all end - + end diff --git a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb index 2e27bb02..44d5956e 100644 --- a/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb +++ b/vendor/built_in_modules/announcement/app/views/panel/announcement/back_end/bulletins/_form.html.erb @@ -11,7 +11,7 @@
    -

    <%= t('nccu.picture') %>

    +

    <%= t('nccu.picture') %>

    @@ -43,7 +43,7 @@
    -

    <%= t('nccu.date') %>

    +

    <%= t('nccu.date') %>

    @@ -65,7 +65,7 @@
    -

    <%= t(:status) %>

    +

    <%= t(:status) %>

    <%= content_tag :label,:class => "checkbox inline" do -%> @@ -89,7 +89,7 @@
    -

    <%= t('approval.stat') %>

    +

    <%= t('approval.stat') %>

    <%= @bulletin.not_checked_reason rescue t("rejected_reason_empty") %>
    @@ -99,7 +99,7 @@
    -

    <%= t('nccu.tags') %>

    +

    <%= t('nccu.tags') %>

    <% @tags.each do |tag| %> @@ -186,7 +186,7 @@

    -

    <%= t(:link) %>

    +

    <%= t(:link) %>