Fully updated..
| After Width: | Height: | Size: 5.0 KiB | 
|  | @ -11,4 +11,3 @@ | |||
| //= require bootstrap
 | ||||
| //= require orbitdesktopAPI
 | ||||
| //= require orbitdesktop
 | ||||
| //= require desktopload
 | ||||
|  | @ -1,5 +1,6 @@ | |||
| 
 | ||||
| orbitDesktop.prototype.themefolder = "desktop_themes"; | ||||
| orbitDesktopAPI.prototype.notifyImgPath = "/assets/"; | ||||
| alert("<%= @desktop.inspect %>") | ||||
| var od = new orbitDesktop("#ajax_container"); | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,14 @@ | |||
| $(document).ready(function() { | ||||
| 	$('.check[checked="checked"]').parents(".checkbox").addClass("checked"); | ||||
| 	$(".checkbox").click(function(){ | ||||
| 		if($(this).children(".check").attr("checked")){ | ||||
| 			// uncheck
 | ||||
| 		$(this).children(".check").attr('checked', false); | ||||
| 		$(this).removeClass("checked"); | ||||
| 		}else{ | ||||
| 			// check
 | ||||
| 			$(this).children(".check").attr({checked: "checked"}); | ||||
| 			$(this).addClass("checked"); | ||||
| 		} | ||||
| 	}); | ||||
| }); | ||||
|  | @ -0,0 +1,126 @@ | |||
| /* | ||||
|  * Date Format 1.2.3 | ||||
|  * (c) 2007-2009 Steven Levithan <stevenlevithan.com> | ||||
|  * MIT license | ||||
|  * | ||||
|  * Includes enhancements by Scott Trenda <scott.trenda.net> | ||||
|  * and Kris Kowal <cixar.com/~kris.kowal/> | ||||
|  * | ||||
|  * Accepts a date, a mask, or a date and a mask. | ||||
|  * Returns a formatted version of the given date. | ||||
|  * The date defaults to the current date/time. | ||||
|  * The mask defaults to dateFormat.masks.default. | ||||
|  */ | ||||
| 
 | ||||
| var dateFormat = function () { | ||||
| 	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g, | ||||
| 		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, | ||||
| 		timezoneClip = /[^-+\dA-Z]/g, | ||||
| 		pad = function (val, len) { | ||||
| 			val = String(val); | ||||
| 			len = len || 2; | ||||
| 			while (val.length < len) val = "0" + val; | ||||
| 			return val; | ||||
| 		}; | ||||
| 
 | ||||
| 	// Regexes and supporting functions are cached through closure
 | ||||
| 	return function (date, mask, utc) { | ||||
| 		var dF = dateFormat; | ||||
| 
 | ||||
| 		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
 | ||||
| 		if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) { | ||||
| 			mask = date; | ||||
| 			date = undefined; | ||||
| 		} | ||||
| 
 | ||||
| 		// Passing date through Date applies Date.parse, if necessary
 | ||||
| 		date = date ? new Date(date) : new Date; | ||||
| 		if (isNaN(date)) throw SyntaxError("invalid date"); | ||||
| 
 | ||||
| 		mask = String(dF.masks[mask] || mask || dF.masks["default"]); | ||||
| 
 | ||||
| 		// Allow setting the utc argument via the mask
 | ||||
| 		if (mask.slice(0, 4) == "UTC:") { | ||||
| 			mask = mask.slice(4); | ||||
| 			utc = true; | ||||
| 		} | ||||
| 
 | ||||
| 		var	_ = utc ? "getUTC" : "get", | ||||
| 			d = date[_ + "Date"](), | ||||
| 			D = date[_ + "Day"](), | ||||
| 			m = date[_ + "Month"](), | ||||
| 			y = date[_ + "FullYear"](), | ||||
| 			H = date[_ + "Hours"](), | ||||
| 			M = date[_ + "Minutes"](), | ||||
| 			s = date[_ + "Seconds"](), | ||||
| 			L = date[_ + "Milliseconds"](), | ||||
| 			o = utc ? 0 : date.getTimezoneOffset(), | ||||
| 			flags = { | ||||
| 				d:    d, | ||||
| 				dd:   pad(d), | ||||
| 				ddd:  dF.i18n.dayNames[D], | ||||
| 				dddd: dF.i18n.dayNames[D + 7], | ||||
| 				m:    m + 1, | ||||
| 				mm:   pad(m + 1), | ||||
| 				mmm:  dF.i18n.monthNames[m], | ||||
| 				mmmm: dF.i18n.monthNames[m + 12], | ||||
| 				yy:   String(y).slice(2), | ||||
| 				yyyy: y, | ||||
| 				h:    H % 12 || 12, | ||||
| 				hh:   pad(H % 12 || 12), | ||||
| 				H:    H, | ||||
| 				HH:   pad(H), | ||||
| 				M:    M, | ||||
| 				MM:   pad(M), | ||||
| 				s:    s, | ||||
| 				ss:   pad(s), | ||||
| 				l:    pad(L, 3), | ||||
| 				L:    pad(L > 99 ? Math.round(L / 10) : L), | ||||
| 				t:    H < 12 ? "a"  : "p", | ||||
| 				tt:   H < 12 ? "am" : "pm", | ||||
| 				T:    H < 12 ? "A"  : "P", | ||||
| 				TT:   H < 12 ? "AM" : "PM", | ||||
| 				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""), | ||||
| 				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), | ||||
| 				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10] | ||||
| 			}; | ||||
| 
 | ||||
| 		return mask.replace(token, function ($0) { | ||||
| 			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); | ||||
| 		}); | ||||
| 	}; | ||||
| }(); | ||||
| 
 | ||||
| // Some common format strings
 | ||||
| dateFormat.masks = { | ||||
| 	"default":      "ddd mmm dd yyyy HH:MM:ss", | ||||
| 	shortDate:      "m/d/yy", | ||||
| 	mediumDate:     "mmm d, yyyy", | ||||
| 	longDate:       "mmmm d, yyyy", | ||||
| 	fullDate:       "dddd, mmmm d, yyyy", | ||||
| 	shortTime:      "h:MM TT", | ||||
| 	mediumTime:     "h:MM:ss TT", | ||||
| 	longTime:       "h:MM:ss TT Z", | ||||
| 	isoDate:        "yyyy / mm / dd", | ||||
| 	isoTime:        "HH:MM:ss", | ||||
| 	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss", | ||||
| 	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" | ||||
| }; | ||||
| 
 | ||||
| // Internationalization strings
 | ||||
| dateFormat.i18n = { | ||||
| 	dayNames: [ | ||||
| 		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", | ||||
| 		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" | ||||
| 	], | ||||
| 	monthNames: [ | ||||
| 		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", | ||||
| 		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" | ||||
| 	] | ||||
| }; | ||||
| 
 | ||||
| // For convenience...
 | ||||
| Date.prototype.format = function (mask, utc) { | ||||
| 	return dateFormat(this, mask, utc); | ||||
| }; | ||||
| 
 | ||||
|  | @ -0,0 +1,891 @@ | |||
| /** | ||||
|  * | ||||
|  * Date picker | ||||
|  * Author: Stefan Petre www.eyecon.ro | ||||
|  *  | ||||
|  * Dual licensed under the MIT and GPL licenses | ||||
|  *  | ||||
|  */ | ||||
| (function ($) { | ||||
| 	var DatePicker = function () { | ||||
| 		var	ids = {}, | ||||
| 			views = { | ||||
| 				years: 'datepickerViewYears', | ||||
| 				moths: 'datepickerViewMonths', | ||||
| 				days: 'datepickerViewDays' | ||||
| 			}, | ||||
| 			tpl = { | ||||
| 				wrapper: '<div class="datepicker"><div class="datepickerContainer"><table cellspacing="0" cellpadding="0"><tbody><tr></tr></tbody></table></div></div>', | ||||
| 				head: [ | ||||
| 					'<td>', | ||||
| 					'<table cellspacing="0" cellpadding="0">', | ||||
| 						'<thead>', | ||||
| 							'<tr>', | ||||
| 								'<th class="datepickerGoPrev"><a href="#"><span><%=prev%></span></a></th>', | ||||
| 								'<th colspan="6" class="datepickerMonth"><a href="#"><span></span></a></th>', | ||||
| 								'<th class="datepickerGoNext"><a href="#"><span><%=next%></span></a></th>', | ||||
| 							'</tr>', | ||||
| 							'<tr class="datepickerDoW">', | ||||
| 								'<th><span><%=week%></span></th>', | ||||
| 								'<th><span><%=day1%></span></th>', | ||||
| 								'<th><span><%=day2%></span></th>', | ||||
| 								'<th><span><%=day3%></span></th>', | ||||
| 								'<th><span><%=day4%></span></th>', | ||||
| 								'<th><span><%=day5%></span></th>', | ||||
| 								'<th><span><%=day6%></span></th>', | ||||
| 								'<th><span><%=day7%></span></th>', | ||||
| 							'</tr>', | ||||
| 						'</thead>', | ||||
| 					'</table></td>' | ||||
| 				], | ||||
| 				space : '<td class="datepickerSpace"><div></div></td>', | ||||
| 				days: [ | ||||
| 					'<tbody class="datepickerDays">', | ||||
| 						'<tr>', | ||||
| 							'<th class="datepickerWeek"><a href="#"><span><%=weeks[0].week%></span></a></th>', | ||||
| 							'<td class="<%=weeks[0].days[0].classname%>"><a href="#"><span><%=weeks[0].days[0].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[0].days[1].classname%>"><a href="#"><span><%=weeks[0].days[1].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[0].days[2].classname%>"><a href="#"><span><%=weeks[0].days[2].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[0].days[3].classname%>"><a href="#"><span><%=weeks[0].days[3].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[0].days[4].classname%>"><a href="#"><span><%=weeks[0].days[4].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[0].days[5].classname%>"><a href="#"><span><%=weeks[0].days[5].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[0].days[6].classname%>"><a href="#"><span><%=weeks[0].days[6].text%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 						'<tr>', | ||||
| 							'<th class="datepickerWeek"><a href="#"><span><%=weeks[1].week%></span></a></th>', | ||||
| 							'<td class="<%=weeks[1].days[0].classname%>"><a href="#"><span><%=weeks[1].days[0].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[1].days[1].classname%>"><a href="#"><span><%=weeks[1].days[1].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[1].days[2].classname%>"><a href="#"><span><%=weeks[1].days[2].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[1].days[3].classname%>"><a href="#"><span><%=weeks[1].days[3].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[1].days[4].classname%>"><a href="#"><span><%=weeks[1].days[4].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[1].days[5].classname%>"><a href="#"><span><%=weeks[1].days[5].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[1].days[6].classname%>"><a href="#"><span><%=weeks[1].days[6].text%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 						'<tr>', | ||||
| 							'<th class="datepickerWeek"><a href="#"><span><%=weeks[2].week%></span></a></th>', | ||||
| 							'<td class="<%=weeks[2].days[0].classname%>"><a href="#"><span><%=weeks[2].days[0].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[2].days[1].classname%>"><a href="#"><span><%=weeks[2].days[1].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[2].days[2].classname%>"><a href="#"><span><%=weeks[2].days[2].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[2].days[3].classname%>"><a href="#"><span><%=weeks[2].days[3].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[2].days[4].classname%>"><a href="#"><span><%=weeks[2].days[4].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[2].days[5].classname%>"><a href="#"><span><%=weeks[2].days[5].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[2].days[6].classname%>"><a href="#"><span><%=weeks[2].days[6].text%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 						'<tr>', | ||||
| 							'<th class="datepickerWeek"><a href="#"><span><%=weeks[3].week%></span></a></th>', | ||||
| 							'<td class="<%=weeks[3].days[0].classname%>"><a href="#"><span><%=weeks[3].days[0].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[3].days[1].classname%>"><a href="#"><span><%=weeks[3].days[1].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[3].days[2].classname%>"><a href="#"><span><%=weeks[3].days[2].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[3].days[3].classname%>"><a href="#"><span><%=weeks[3].days[3].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[3].days[4].classname%>"><a href="#"><span><%=weeks[3].days[4].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[3].days[5].classname%>"><a href="#"><span><%=weeks[3].days[5].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[3].days[6].classname%>"><a href="#"><span><%=weeks[3].days[6].text%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 						'<tr>', | ||||
| 							'<th class="datepickerWeek"><a href="#"><span><%=weeks[4].week%></span></a></th>', | ||||
| 							'<td class="<%=weeks[4].days[0].classname%>"><a href="#"><span><%=weeks[4].days[0].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[4].days[1].classname%>"><a href="#"><span><%=weeks[4].days[1].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[4].days[2].classname%>"><a href="#"><span><%=weeks[4].days[2].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[4].days[3].classname%>"><a href="#"><span><%=weeks[4].days[3].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[4].days[4].classname%>"><a href="#"><span><%=weeks[4].days[4].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[4].days[5].classname%>"><a href="#"><span><%=weeks[4].days[5].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[4].days[6].classname%>"><a href="#"><span><%=weeks[4].days[6].text%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 						'<tr>', | ||||
| 							'<th class="datepickerWeek"><a href="#"><span><%=weeks[5].week%></span></a></th>', | ||||
| 							'<td class="<%=weeks[5].days[0].classname%>"><a href="#"><span><%=weeks[5].days[0].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[5].days[1].classname%>"><a href="#"><span><%=weeks[5].days[1].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[5].days[2].classname%>"><a href="#"><span><%=weeks[5].days[2].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[5].days[3].classname%>"><a href="#"><span><%=weeks[5].days[3].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[5].days[4].classname%>"><a href="#"><span><%=weeks[5].days[4].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[5].days[5].classname%>"><a href="#"><span><%=weeks[5].days[5].text%></span></a></td>', | ||||
| 							'<td class="<%=weeks[5].days[6].classname%>"><a href="#"><span><%=weeks[5].days[6].text%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 					'</tbody>' | ||||
| 				], | ||||
| 				months: [ | ||||
| 					'<tbody class="<%=className%>">', | ||||
| 						'<tr>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[0]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[1]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[2]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[3]%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 						'<tr>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[4]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[5]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[6]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[7]%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 						'<tr>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[8]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[9]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[10]%></span></a></td>', | ||||
| 							'<td colspan="2"><a href="#"><span><%=data[11]%></span></a></td>', | ||||
| 						'</tr>', | ||||
| 					'</tbody>' | ||||
| 				] | ||||
| 			}, | ||||
| 			defaults = { | ||||
| 				flat: false, | ||||
| 				starts: 1, | ||||
| 				prev: '◀', | ||||
| 				next: '▶', | ||||
| 				lastSel: false, | ||||
| 				mode: 'single', | ||||
| 				view: 'days', | ||||
| 				calendars: 1, | ||||
| 				format: 'Y-m-d', | ||||
| 				position: 'bottom', | ||||
| 				eventName: 'click', | ||||
| 				onRender: function(){return {};}, | ||||
| 				onChange: function(){return true;}, | ||||
| 				onShow: function(){return true;}, | ||||
| 				onBeforeShow: function(){return true;}, | ||||
| 				onHide: function(){return true;}, | ||||
| 				locale: { | ||||
| 					days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], | ||||
| 					daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], | ||||
| 					daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], | ||||
| 					months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | ||||
| 					monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | ||||
| 					weekMin: 'wk' | ||||
| 				} | ||||
| 			}, | ||||
| 			fill = function(el) { | ||||
| 				var options = $(el).data('datepicker'); | ||||
| 				var cal = $(el); | ||||
| 				var currentCal = Math.floor(options.calendars/2), date, data, dow, month, cnt = 0, week, days, indic, indic2, html, tblCal; | ||||
| 				cal.find('td>table tbody').remove(); | ||||
| 				for (var i = 0; i < options.calendars; i++) { | ||||
| 					date = new Date(options.current); | ||||
| 					date.addMonths(-currentCal + i); | ||||
| 					tblCal = cal.find('table').eq(i+1); | ||||
| 					switch (tblCal[0].className) { | ||||
| 						case 'datepickerViewDays': | ||||
| 							dow = formatDate(date, 'B, Y'); | ||||
| 							break; | ||||
| 						case 'datepickerViewMonths': | ||||
| 							dow = date.getFullYear(); | ||||
| 							break; | ||||
| 						case 'datepickerViewYears': | ||||
| 							dow = (date.getFullYear()-6) + ' - ' + (date.getFullYear()+5); | ||||
| 							break; | ||||
| 					}  | ||||
| 					tblCal.find('thead tr:first th:eq(1) span').text(dow); | ||||
| 					dow = date.getFullYear()-6; | ||||
| 					data = { | ||||
| 						data: [], | ||||
| 						className: 'datepickerYears' | ||||
| 					} | ||||
| 					for ( var j = 0; j < 12; j++) { | ||||
| 						data.data.push(dow + j); | ||||
| 					} | ||||
| 					html = tmpl(tpl.months.join(''), data); | ||||
| 					date.setDate(1); | ||||
| 					data = {weeks:[], test: 10}; | ||||
| 					month = date.getMonth(); | ||||
| 					var dow = (date.getDay() - options.starts) % 7; | ||||
| 					date.addDays(-(dow + (dow < 0 ? 7 : 0))); | ||||
| 					week = -1; | ||||
| 					cnt = 0; | ||||
| 					while (cnt < 42) { | ||||
| 						indic = parseInt(cnt/7,10); | ||||
| 						indic2 = cnt%7; | ||||
| 						if (!data.weeks[indic]) { | ||||
| 							week = date.getWeekNumber(); | ||||
| 							data.weeks[indic] = { | ||||
| 								week: week, | ||||
| 								days: [] | ||||
| 							}; | ||||
| 						} | ||||
| 						data.weeks[indic].days[indic2] = { | ||||
| 							text: date.getDate(), | ||||
| 							classname: [] | ||||
| 						}; | ||||
| 						if (month != date.getMonth()) { | ||||
| 							data.weeks[indic].days[indic2].classname.push('datepickerNotInMonth'); | ||||
| 						} | ||||
| 						if (date.getDay() == 0) { | ||||
| 							data.weeks[indic].days[indic2].classname.push('datepickerSunday'); | ||||
| 						} | ||||
| 						if (date.getDay() == 6) { | ||||
| 							data.weeks[indic].days[indic2].classname.push('datepickerSaturday'); | ||||
| 						} | ||||
| 						var fromUser = options.onRender(date); | ||||
| 						var val = date.valueOf(); | ||||
| 						if (fromUser.selected || options.date == val || $.inArray(val, options.date) > -1 || (options.mode == 'range' && val >= options.date[0] && val <= options.date[1])) { | ||||
| 							data.weeks[indic].days[indic2].classname.push('datepickerSelected'); | ||||
| 						} | ||||
| 						if (fromUser.disabled) { | ||||
| 							data.weeks[indic].days[indic2].classname.push('datepickerDisabled'); | ||||
| 						} | ||||
| 						if (fromUser.className) { | ||||
| 							data.weeks[indic].days[indic2].classname.push(fromUser.className); | ||||
| 						} | ||||
| 						data.weeks[indic].days[indic2].classname = data.weeks[indic].days[indic2].classname.join(' '); | ||||
| 						cnt++; | ||||
| 						date.addDays(1); | ||||
| 					} | ||||
| 					html = tmpl(tpl.days.join(''), data) + html; | ||||
| 					data = { | ||||
| 						data: options.locale.monthsShort, | ||||
| 						className: 'datepickerMonths' | ||||
| 					}; | ||||
| 					html = tmpl(tpl.months.join(''), data) + html; | ||||
| 					tblCal.append(html); | ||||
| 				} | ||||
| 			}, | ||||
| 			parseDate = function (date, format) { | ||||
| 				if (date.constructor == Date) { | ||||
| 					return new Date(date); | ||||
| 				} | ||||
| 				var parts = date.split(/\W+/); | ||||
| 				var against = format.split(/\W+/), d, m, y, h, min, now = new Date(); | ||||
| 				for (var i = 0; i < parts.length; i++) { | ||||
| 					switch (against[i]) { | ||||
| 						case 'd': | ||||
| 						case 'e': | ||||
| 							d = parseInt(parts[i],10); | ||||
| 							break; | ||||
| 						case 'm': | ||||
| 							m = parseInt(parts[i], 10)-1; | ||||
| 							break; | ||||
| 						case 'Y': | ||||
| 						case 'y': | ||||
| 							y = parseInt(parts[i], 10); | ||||
| 							y += y > 100 ? 0 : (y < 29 ? 2000 : 1900); | ||||
| 							break; | ||||
| 						case 'H': | ||||
| 						case 'I': | ||||
| 						case 'k': | ||||
| 						case 'l': | ||||
| 							h = parseInt(parts[i], 10); | ||||
| 							break; | ||||
| 						case 'P': | ||||
| 						case 'p': | ||||
| 							if (/pm/i.test(parts[i]) && h < 12) { | ||||
| 								h += 12; | ||||
| 							} else if (/am/i.test(parts[i]) && h >= 12) { | ||||
| 								h -= 12; | ||||
| 							} | ||||
| 							break; | ||||
| 						case 'M': | ||||
| 							min = parseInt(parts[i], 10); | ||||
| 							break; | ||||
| 					} | ||||
| 				} | ||||
| 				return new Date( | ||||
| 					y === undefined ? now.getFullYear() : y, | ||||
| 					m === undefined ? now.getMonth() : m, | ||||
| 					d === undefined ? now.getDate() : d, | ||||
| 					h === undefined ? now.getHours() : h, | ||||
| 					min === undefined ? now.getMinutes() : min, | ||||
| 					0 | ||||
| 				); | ||||
| 			}, | ||||
| 			formatDate = function(date, format) { | ||||
| 				var m = date.getMonth(); | ||||
| 				var d = date.getDate(); | ||||
| 				var y = date.getFullYear(); | ||||
| 				var wn = date.getWeekNumber(); | ||||
| 				var w = date.getDay(); | ||||
| 				var s = {}; | ||||
| 				var hr = date.getHours(); | ||||
| 				var pm = (hr >= 12); | ||||
| 				var ir = (pm) ? (hr - 12) : hr; | ||||
| 				var dy = date.getDayOfYear(); | ||||
| 				if (ir == 0) { | ||||
| 					ir = 12; | ||||
| 				} | ||||
| 				var min = date.getMinutes(); | ||||
| 				var sec = date.getSeconds(); | ||||
| 				var parts = format.split(''), part; | ||||
| 				for ( var i = 0; i < parts.length; i++ ) { | ||||
| 					part = parts[i]; | ||||
| 					switch (parts[i]) { | ||||
| 						case 'a': | ||||
| 							part = date.getDayName(); | ||||
| 							break; | ||||
| 						case 'A': | ||||
| 							part = date.getDayName(true); | ||||
| 							break; | ||||
| 						case 'b': | ||||
| 							part = date.getMonthName(); | ||||
| 							break; | ||||
| 						case 'B': | ||||
| 							part = date.getMonthName(true); | ||||
| 							break; | ||||
| 						case 'C': | ||||
| 							part = 1 + Math.floor(y / 100); | ||||
| 							break; | ||||
| 						case 'd': | ||||
| 							part = (d < 10) ? ("0" + d) : d; | ||||
| 							break; | ||||
| 						case 'e': | ||||
| 							part = d; | ||||
| 							break; | ||||
| 						case 'H': | ||||
| 							part = (hr < 10) ? ("0" + hr) : hr; | ||||
| 							break; | ||||
| 						case 'I': | ||||
| 							part = (ir < 10) ? ("0" + ir) : ir; | ||||
| 							break; | ||||
| 						case 'j': | ||||
| 							part = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; | ||||
| 							break; | ||||
| 						case 'k': | ||||
| 							part = hr; | ||||
| 							break; | ||||
| 						case 'l': | ||||
| 							part = ir; | ||||
| 							break; | ||||
| 						case 'm': | ||||
| 							part = (m < 9) ? ("0" + (1+m)) : (1+m); | ||||
| 							break; | ||||
| 						case 'M': | ||||
| 							part = (min < 10) ? ("0" + min) : min; | ||||
| 							break; | ||||
| 						case 'p': | ||||
| 						case 'P': | ||||
| 							part = pm ? "PM" : "AM"; | ||||
| 							break; | ||||
| 						case 's': | ||||
| 							part = Math.floor(date.getTime() / 1000); | ||||
| 							break; | ||||
| 						case 'S': | ||||
| 							part = (sec < 10) ? ("0" + sec) : sec; | ||||
| 							break; | ||||
| 						case 'u': | ||||
| 							part = w + 1; | ||||
| 							break; | ||||
| 						case 'w': | ||||
| 							part = w; | ||||
| 							break; | ||||
| 						case 'y': | ||||
| 							part = ('' + y).substr(2, 2); | ||||
| 							break; | ||||
| 						case 'Y': | ||||
| 							part = y; | ||||
| 							break; | ||||
| 					} | ||||
| 					parts[i] = part; | ||||
| 				} | ||||
| 				return parts.join(''); | ||||
| 			}, | ||||
| 			extendDate = function(options) { | ||||
| 				if (Date.prototype.tempDate) { | ||||
| 					return; | ||||
| 				} | ||||
| 				Date.prototype.tempDate = null; | ||||
| 				Date.prototype.months = options.months; | ||||
| 				Date.prototype.monthsShort = options.monthsShort; | ||||
| 				Date.prototype.days = options.days; | ||||
| 				Date.prototype.daysShort = options.daysShort; | ||||
| 				Date.prototype.getMonthName = function(fullName) { | ||||
| 					return this[fullName ? 'months' : 'monthsShort'][this.getMonth()]; | ||||
| 				}; | ||||
| 				Date.prototype.getDayName = function(fullName) { | ||||
| 					return this[fullName ? 'days' : 'daysShort'][this.getDay()]; | ||||
| 				}; | ||||
| 				Date.prototype.addDays = function (n) { | ||||
| 					this.setDate(this.getDate() + n); | ||||
| 					this.tempDate = this.getDate(); | ||||
| 				}; | ||||
| 				Date.prototype.addMonths = function (n) { | ||||
| 					if (this.tempDate == null) { | ||||
| 						this.tempDate = this.getDate(); | ||||
| 					} | ||||
| 					this.setDate(1); | ||||
| 					this.setMonth(this.getMonth() + n); | ||||
| 					this.setDate(Math.min(this.tempDate, this.getMaxDays())); | ||||
| 				}; | ||||
| 				Date.prototype.addYears = function (n) { | ||||
| 					if (this.tempDate == null) { | ||||
| 						this.tempDate = this.getDate(); | ||||
| 					} | ||||
| 					this.setDate(1); | ||||
| 					this.setFullYear(this.getFullYear() + n); | ||||
| 					this.setDate(Math.min(this.tempDate, this.getMaxDays())); | ||||
| 				}; | ||||
| 				Date.prototype.getMaxDays = function() { | ||||
| 					var tmpDate = new Date(Date.parse(this)), | ||||
| 						d = 28, m; | ||||
| 					m = tmpDate.getMonth(); | ||||
| 					d = 28; | ||||
| 					while (tmpDate.getMonth() == m) { | ||||
| 						d ++; | ||||
| 						tmpDate.setDate(d); | ||||
| 					} | ||||
| 					return d - 1; | ||||
| 				}; | ||||
| 				Date.prototype.getFirstDay = function() { | ||||
| 					var tmpDate = new Date(Date.parse(this)); | ||||
| 					tmpDate.setDate(1); | ||||
| 					return tmpDate.getDay(); | ||||
| 				}; | ||||
| 				Date.prototype.getWeekNumber = function() { | ||||
| 					var tempDate = new Date(this); | ||||
| 					tempDate.setDate(tempDate.getDate() - (tempDate.getDay() + 6) % 7 + 3); | ||||
| 					var dms = tempDate.valueOf(); | ||||
| 					tempDate.setMonth(0); | ||||
| 					tempDate.setDate(4); | ||||
| 					return Math.round((dms - tempDate.valueOf()) / (604800000)) + 1; | ||||
| 				}; | ||||
| 				Date.prototype.getDayOfYear = function() { | ||||
| 					var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); | ||||
| 					var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0); | ||||
| 					var time = now - then; | ||||
| 					return Math.floor(time / 24*60*60*1000); | ||||
| 				}; | ||||
| 			}, | ||||
| 			layout = function (el) { | ||||
| 				var options = $(el).data('datepicker'); | ||||
| 				var cal = $('#' + options.id); | ||||
| 				if (!options.extraHeight) { | ||||
| 					var divs = $(el).find('div'); | ||||
| 					//options.extraHeight = divs.get(0).offsetHeight + divs.get(1).offsetHeight;
 | ||||
| 					//options.extraWidth = divs.get(2).offsetWidth + divs.get(3).offsetWidth;
 | ||||
| 				} | ||||
| 				var tbl = cal.find('table:first').get(0); | ||||
| 				var width = tbl.offsetWidth; | ||||
| 				var height = tbl.offsetHeight; | ||||
| 				cal.css({ | ||||
| 					width: width + options.extraWidth + 'px', | ||||
| 					height: height + options.extraHeight + 'px' | ||||
| 				}).find('div.datepickerContainer').css({ | ||||
| 					width: width + 'px', | ||||
| 					height: height + 'px' | ||||
| 				}); | ||||
| 			}, | ||||
| 			click = function(ev) { | ||||
| 				if ($(ev.target).is('span')) { | ||||
| 					ev.target = ev.target.parentNode; | ||||
| 				} | ||||
| 				var el = $(ev.target); | ||||
| 				if (el.is('a')) { | ||||
| 					ev.target.blur(); | ||||
| 					if (el.hasClass('datepickerDisabled')) { | ||||
| 						return false; | ||||
| 					} | ||||
| 					var options = $(this).data('datepicker'); | ||||
| 					var parentEl = el.parent(); | ||||
| 					var tblEl = parentEl.parent().parent().parent(); | ||||
| 					var tblIndex = $('table', this).index(tblEl.get(0)) - 1; | ||||
| 					var tmp = new Date(options.current); | ||||
| 					var changed = false; | ||||
| 					var fillIt = false; | ||||
| 					if (parentEl.is('th')) { | ||||
| 						if (parentEl.hasClass('datepickerWeek') && options.mode == 'range' && !parentEl.next().hasClass('datepickerDisabled')) { | ||||
| 							var val = parseInt(parentEl.next().text(), 10); | ||||
| 							tmp.addMonths(tblIndex - Math.floor(options.calendars/2)); | ||||
| 							if (parentEl.next().hasClass('datepickerNotInMonth')) { | ||||
| 								tmp.addMonths(val > 15 ? -1 : 1); | ||||
| 							} | ||||
| 							tmp.setDate(val); | ||||
| 							options.date[0] = (tmp.setHours(0,0,0,0)).valueOf(); | ||||
| 							tmp.setHours(23,59,59,0); | ||||
| 							tmp.addDays(6); | ||||
| 							options.date[1] = tmp.valueOf(); | ||||
| 							fillIt = true; | ||||
| 							changed = true; | ||||
| 							options.lastSel = false; | ||||
| 						} else if (parentEl.hasClass('datepickerMonth')) { | ||||
| 							tmp.addMonths(tblIndex - Math.floor(options.calendars/2)); | ||||
| 							switch (tblEl.get(0).className) { | ||||
| 								case 'datepickerViewDays': | ||||
| 									tblEl.get(0).className = 'datepickerViewMonths'; | ||||
| 									el.find('span').text(tmp.getFullYear()); | ||||
| 									break; | ||||
| 								case 'datepickerViewMonths': | ||||
| 									tblEl.get(0).className = 'datepickerViewYears'; | ||||
| 									el.find('span').text((tmp.getFullYear()-6) + ' - ' + (tmp.getFullYear()+5)); | ||||
| 									break; | ||||
| 								case 'datepickerViewYears': | ||||
| 									tblEl.get(0).className = 'datepickerViewDays'; | ||||
| 									el.find('span').text(formatDate(tmp, 'B, Y')); | ||||
| 									break; | ||||
| 							} | ||||
| 						} else if (parentEl.parent().parent().is('thead')) { | ||||
| 							switch (tblEl.get(0).className) { | ||||
| 								case 'datepickerViewDays': | ||||
| 									options.current.addMonths(parentEl.hasClass('datepickerGoPrev') ? -1 : 1); | ||||
| 									break; | ||||
| 								case 'datepickerViewMonths': | ||||
| 									options.current.addYears(parentEl.hasClass('datepickerGoPrev') ? -1 : 1); | ||||
| 									break; | ||||
| 								case 'datepickerViewYears': | ||||
| 									options.current.addYears(parentEl.hasClass('datepickerGoPrev') ? -12 : 12); | ||||
| 									break; | ||||
| 							} | ||||
| 							fillIt = true; | ||||
| 						} | ||||
| 					} else if (parentEl.is('td') && !parentEl.hasClass('datepickerDisabled')) { | ||||
| 						switch (tblEl.get(0).className) { | ||||
| 							case 'datepickerViewMonths': | ||||
| 								options.current.setMonth(tblEl.find('tbody.datepickerMonths td').index(parentEl)); | ||||
| 								options.current.setFullYear(parseInt(tblEl.find('thead th.datepickerMonth span').text(), 10)); | ||||
| 								options.current.addMonths(Math.floor(options.calendars/2) - tblIndex); | ||||
| 								tblEl.get(0).className = 'datepickerViewDays'; | ||||
| 								break; | ||||
| 							case 'datepickerViewYears': | ||||
| 								options.current.setFullYear(parseInt(el.text(), 10)); | ||||
| 								tblEl.get(0).className = 'datepickerViewMonths'; | ||||
| 								break; | ||||
| 							default: | ||||
| 								var val = parseInt(el.text(), 10); | ||||
| 								tmp.addMonths(tblIndex - Math.floor(options.calendars/2)); | ||||
| 								if (parentEl.hasClass('datepickerNotInMonth')) { | ||||
| 									tmp.addMonths(val > 15 ? -1 : 1); | ||||
| 								} | ||||
| 								tmp.setDate(val); | ||||
| 								switch (options.mode) { | ||||
| 									case 'multiple': | ||||
| 										val = (tmp.setHours(0,0,0,0)).valueOf(); | ||||
| 										if ($.inArray(val, options.date) > -1) { | ||||
| 											$.each(options.date, function(nr, dat){ | ||||
| 												if (dat == val) { | ||||
| 													options.date.splice(nr,1); | ||||
| 													return false; | ||||
| 												} | ||||
| 											}); | ||||
| 										} else { | ||||
| 											options.date.push(val); | ||||
| 										} | ||||
| 										break; | ||||
| 									case 'range': | ||||
| 										if (!options.lastSel) { | ||||
| 											options.date[0] = (tmp.setHours(0,0,0,0)).valueOf(); | ||||
| 										} | ||||
| 										val = (tmp.setHours(23,59,59,0)).valueOf(); | ||||
| 										if (val < options.date[0]) { | ||||
| 											options.date[1] = options.date[0] + 86399000; | ||||
| 											options.date[0] = val - 86399000; | ||||
| 										} else { | ||||
| 											options.date[1] = val; | ||||
| 										} | ||||
| 										options.lastSel = !options.lastSel; | ||||
| 										break; | ||||
| 									default: | ||||
| 										options.date = tmp.valueOf(); | ||||
| 										break; | ||||
| 								} | ||||
| 								break; | ||||
| 						} | ||||
| 						fillIt = true; | ||||
| 						changed = true; | ||||
| 					} | ||||
| 					if (fillIt) { | ||||
| 						fill(this); | ||||
| 					} | ||||
| 					if (changed) { | ||||
| 						options.onChange.apply(this, prepareDate(options)); | ||||
| 					} | ||||
| 				} | ||||
| 				return false; | ||||
| 			}, | ||||
| 			prepareDate = function (options) { | ||||
| 				var tmp; | ||||
| 				if (options.mode == 'single') { | ||||
| 					tmp = new Date(options.date); | ||||
| 					return [formatDate(tmp, options.format), tmp, options.el]; | ||||
| 				} else { | ||||
| 					tmp = [[],[], options.el]; | ||||
| 					$.each(options.date, function(nr, val){ | ||||
| 						var date = new Date(val); | ||||
| 						tmp[0].push(formatDate(date, options.format)); | ||||
| 						tmp[1].push(date); | ||||
| 					}); | ||||
| 					return tmp; | ||||
| 				} | ||||
| 			}, | ||||
| 			getViewport = function () { | ||||
| 				var m = document.compatMode == 'CSS1Compat'; | ||||
| 				return { | ||||
| 					l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), | ||||
| 					t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop), | ||||
| 					w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth), | ||||
| 					h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight) | ||||
| 				}; | ||||
| 			}, | ||||
| 			isChildOf = function(parentEl, el, container) { | ||||
| 				if (parentEl == el) { | ||||
| 					return true; | ||||
| 				} | ||||
| 				if (parentEl.contains) { | ||||
| 					return parentEl.contains(el); | ||||
| 				} | ||||
| 				if ( parentEl.compareDocumentPosition ) { | ||||
| 					return !!(parentEl.compareDocumentPosition(el) & 16); | ||||
| 				} | ||||
| 				var prEl = el.parentNode; | ||||
| 				while(prEl && prEl != container) { | ||||
| 					if (prEl == parentEl) | ||||
| 						return true; | ||||
| 					prEl = prEl.parentNode; | ||||
| 				} | ||||
| 				return false; | ||||
| 			}, | ||||
| 			show = function (ev) { | ||||
| 				var cal = $('#' + $(this).data('datepickerId')); | ||||
| 				if (!cal.is(':visible')) { | ||||
| 					var calEl = cal.get(0); | ||||
| 					fill(calEl); | ||||
| 					var options = cal.data('datepicker'); | ||||
| 					options.onBeforeShow.apply(this, [cal.get(0)]); | ||||
| 					var pos = $(this).offset(); | ||||
| 					var viewPort = getViewport(); | ||||
| 					var top = pos.top; | ||||
| 					var left = pos.left; | ||||
| 					var oldDisplay = $.curCSS(calEl, 'display'); | ||||
| 					cal.css({ | ||||
| 						visibility: 'hidden', | ||||
| 						display: 'block' | ||||
| 					}); | ||||
| 					layout(calEl); | ||||
| 					switch (options.position){ | ||||
| 						case 'top': | ||||
| 							top -= calEl.offsetHeight; | ||||
| 							break; | ||||
| 						case 'left': | ||||
| 							left -= calEl.offsetWidth; | ||||
| 							break; | ||||
| 						case 'right': | ||||
| 							left += this.offsetWidth; | ||||
| 							break; | ||||
| 						case 'bottom': | ||||
| 							top += this.offsetHeight; | ||||
| 							break; | ||||
| 					} | ||||
| 					if (top + calEl.offsetHeight > viewPort.t + viewPort.h) { | ||||
| 						top = pos.top  - calEl.offsetHeight; | ||||
| 					} | ||||
| 					if (top < viewPort.t) { | ||||
| 						top = pos.top + this.offsetHeight + calEl.offsetHeight; | ||||
| 					} | ||||
| 					if (left + calEl.offsetWidth > viewPort.l + viewPort.w) { | ||||
| 						left = pos.left - calEl.offsetWidth; | ||||
| 					} | ||||
| 					if (left < viewPort.l) { | ||||
| 						left = pos.left + this.offsetWidth | ||||
| 					} | ||||
| 					cal.css({ | ||||
| 						visibility: 'visible', | ||||
| 						display: 'block', | ||||
| 						top: top + 'px', | ||||
| 						left: left + 'px' | ||||
| 					}); | ||||
| 					if (options.onShow.apply(this, [cal.get(0)]) != false) { | ||||
| 						cal.show(); | ||||
| 					} | ||||
| 					$(document).bind('mousedown', {cal: cal, trigger: this}, hide); | ||||
| 				} | ||||
| 				return false; | ||||
| 			}, | ||||
| 			hide = function (ev) { | ||||
| 				if (ev.target != ev.data.trigger && !isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) { | ||||
| 					if (ev.data.cal.data('datepicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) { | ||||
| 						ev.data.cal.hide(); | ||||
| 					} | ||||
| 					$(document).unbind('mousedown', hide); | ||||
| 				} | ||||
| 			}; | ||||
| 		return { | ||||
| 			init: function(options){ | ||||
| 				options = $.extend({}, defaults, options||{}); | ||||
| 				extendDate(options.locale); | ||||
| 				options.calendars = Math.max(1, parseInt(options.calendars,10)||1); | ||||
| 				options.mode = /single|multiple|range/.test(options.mode) ? options.mode : 'single'; | ||||
| 				return this.each(function(){ | ||||
| 					if (!$(this).data('datepicker')) { | ||||
| 						options.el = this; | ||||
| 						if (options.date.constructor == String) { | ||||
| 							options.date = parseDate(options.date, options.format); | ||||
| 							options.date.setHours(0,0,0,0); | ||||
| 						} | ||||
| 						if (options.mode != 'single') { | ||||
| 							if (options.date.constructor != Array) { | ||||
| 								options.date = [options.date.valueOf()]; | ||||
| 								if (options.mode == 'range') { | ||||
| 									options.date.push(((new Date(options.date[0])).setHours(23,59,59,0)).valueOf()); | ||||
| 								} | ||||
| 							} else { | ||||
| 								for (var i = 0; i < options.date.length; i++) { | ||||
| 									options.date[i] = (parseDate(options.date[i], options.format).setHours(0,0,0,0)).valueOf(); | ||||
| 								} | ||||
| 								if (options.mode == 'range') { | ||||
| 									options.date[1] = ((new Date(options.date[1])).setHours(23,59,59,0)).valueOf(); | ||||
| 								} | ||||
| 							} | ||||
| 						} else { | ||||
| 							options.date = options.date.valueOf(); | ||||
| 						} | ||||
| 						if (!options.current) { | ||||
| 							options.current = new Date(); | ||||
| 						} else { | ||||
| 							options.current = parseDate(options.current, options.format); | ||||
| 						}  | ||||
| 						options.current.setDate(1); | ||||
| 						options.current.setHours(0,0,0,0); | ||||
| 						var id = 'datepicker_' + parseInt(Math.random() * 1000), cnt; | ||||
| 						options.id = id; | ||||
| 						$(this).data('datepickerId', options.id); | ||||
| 						var cal = $(tpl.wrapper).attr('id', id).bind('click', click).data('datepicker', options); | ||||
| 						if (options.className) { | ||||
| 							cal.addClass(options.className); | ||||
| 						} | ||||
| 						var html = ''; | ||||
| 						for (var i = 0; i < options.calendars; i++) { | ||||
| 							cnt = options.starts; | ||||
| 							if (i > 0) { | ||||
| 								html += tpl.space; | ||||
| 							} | ||||
| 							html += tmpl(tpl.head.join(''), { | ||||
| 									week: options.locale.weekMin, | ||||
| 									prev: options.prev, | ||||
| 									next: options.next, | ||||
| 									day1: options.locale.daysMin[(cnt++)%7], | ||||
| 									day2: options.locale.daysMin[(cnt++)%7], | ||||
| 									day3: options.locale.daysMin[(cnt++)%7], | ||||
| 									day4: options.locale.daysMin[(cnt++)%7], | ||||
| 									day5: options.locale.daysMin[(cnt++)%7], | ||||
| 									day6: options.locale.daysMin[(cnt++)%7], | ||||
| 									day7: options.locale.daysMin[(cnt++)%7] | ||||
| 								}); | ||||
| 						} | ||||
| 						cal | ||||
| 							.find('tr:first').append(html) | ||||
| 								.find('table').addClass(views[options.view]); | ||||
| 						fill(cal.get(0)); | ||||
| 						if (options.flat) { | ||||
| 							cal.appendTo(this).show().css('position', 'relative'); | ||||
| 							layout(cal.get(0)); | ||||
| 						} else { | ||||
| 							cal.appendTo(document.body); | ||||
| 							$(this).bind(options.eventName, show); | ||||
| 						} | ||||
| 					} | ||||
| 				}); | ||||
| 			}, | ||||
| 			showPicker: function() { | ||||
| 				return this.each( function () { | ||||
| 					if ($(this).data('datepickerId')) { | ||||
| 						show.apply(this); | ||||
| 					} | ||||
| 				}); | ||||
| 			}, | ||||
| 			hidePicker: function() { | ||||
| 				return this.each( function () { | ||||
| 					if ($(this).data('datepickerId')) { | ||||
| 						$('#' + $(this).data('datepickerId')).hide(); | ||||
| 					} | ||||
| 				}); | ||||
| 			}, | ||||
| 			setDate: function(date, shiftTo){ | ||||
| 				return this.each(function(){ | ||||
| 					if ($(this).data('datepickerId')) { | ||||
| 						var cal = $('#' + $(this).data('datepickerId')); | ||||
| 						var options = cal.data('datepicker'); | ||||
| 						options.date = date; | ||||
| 						if (options.date.constructor == String) { | ||||
| 							options.date = parseDate(options.date, options.format); | ||||
| 							options.date.setHours(0,0,0,0); | ||||
| 						} | ||||
| 						if (options.mode != 'single') { | ||||
| 							if (options.date.constructor != Array) { | ||||
| 								options.date = [options.date.valueOf()]; | ||||
| 								if (options.mode == 'range') { | ||||
| 									options.date.push(((new Date(options.date[0])).setHours(23,59,59,0)).valueOf()); | ||||
| 								} | ||||
| 							} else { | ||||
| 								for (var i = 0; i < options.date.length; i++) { | ||||
| 									options.date[i] = (parseDate(options.date[i], options.format).setHours(0,0,0,0)).valueOf(); | ||||
| 								} | ||||
| 								if (options.mode == 'range') { | ||||
| 									options.date[1] = ((new Date(options.date[1])).setHours(23,59,59,0)).valueOf(); | ||||
| 								} | ||||
| 							} | ||||
| 						} else { | ||||
| 							options.date = options.date.valueOf(); | ||||
| 						} | ||||
| 						if (shiftTo) { | ||||
| 							options.current = new Date (options.mode != 'single' ? options.date[0] : options.date); | ||||
| 						} | ||||
| 						fill(cal.get(0)); | ||||
| 					} | ||||
| 				}); | ||||
| 			}, | ||||
| 			getDate: function(formated) { | ||||
| 				if (this.size() > 0) { | ||||
| 					return prepareDate($('#' + $(this).data('datepickerId')).data('datepicker'))[formated ? 0 : 1]; | ||||
| 				} | ||||
| 			}, | ||||
| 			clear: function(){ | ||||
| 				return this.each(function(){ | ||||
| 					if ($(this).data('datepickerId')) { | ||||
| 						var cal = $('#' + $(this).data('datepickerId')); | ||||
| 						var options = cal.data('datepicker'); | ||||
| 						if (options.mode != 'single') { | ||||
| 							options.date = []; | ||||
| 							fill(cal.get(0)); | ||||
| 						} | ||||
| 					} | ||||
| 				}); | ||||
| 			}, | ||||
| 			fixLayout: function(){ | ||||
| 				return this.each(function(){ | ||||
| 					if ($(this).data('datepickerId')) { | ||||
| 						var cal = $('#' + $(this).data('datepickerId')); | ||||
| 						var options = cal.data('datepicker'); | ||||
| 						if (options.flat) { | ||||
| 							layout(cal.get(0)); | ||||
| 						} | ||||
| 					} | ||||
| 				}); | ||||
| 			} | ||||
| 		}; | ||||
| 	}(); | ||||
| 	$.fn.extend({ | ||||
| 		DatePicker: DatePicker.init, | ||||
| 		DatePickerHide: DatePicker.hidePicker, | ||||
| 		DatePickerShow: DatePicker.showPicker, | ||||
| 		DatePickerSetDate: DatePicker.setDate, | ||||
| 		DatePickerGetDate: DatePicker.getDate, | ||||
| 		DatePickerClear: DatePicker.clear, | ||||
| 		DatePickerLayout: DatePicker.fixLayout | ||||
| 	}); | ||||
| })(jQuery); | ||||
| 
 | ||||
| (function(){ | ||||
|   var cache = {}; | ||||
|   | ||||
|   this.tmpl = function tmpl(str, data){ | ||||
|     // Figure out if we're getting a template, or if we need to
 | ||||
|     // load the template - and be sure to cache the result.
 | ||||
|     var fn = !/\W/.test(str) ? | ||||
|       cache[str] = cache[str] || | ||||
|         tmpl(document.getElementById(str).innerHTML) : | ||||
|       | ||||
|       // Generate a reusable function that will serve as a template
 | ||||
|       // generator (and which will be cached).
 | ||||
|       new Function("obj", | ||||
|         "var p=[],print=function(){p.push.apply(p,arguments);};" + | ||||
|         | ||||
|         // Introduce the data as local variables using with(){}
 | ||||
|         "with(obj){p.push('" + | ||||
|         | ||||
|         // Convert the template into pure JavaScript
 | ||||
|         str | ||||
|           .replace(/[\r\t\n]/g, " ") | ||||
|           .split("<%").join("\t") | ||||
|           .replace(/((^|%>)[^\t]*)'/g, "$1\r") | ||||
|           .replace(/\t=(.*?)%>/g, "',$1,'") | ||||
|           .split("\t").join("');") | ||||
|           .split("%>").join("p.push('") | ||||
|           .split("\r").join("\\'") | ||||
|       + "');}return p.join('');"); | ||||
|     | ||||
|     // Provide some basic currying to the user
 | ||||
|     return data ? fn( data ) : fn; | ||||
|   }; | ||||
| })(); | ||||
|  | @ -12,3 +12,4 @@ | |||
| //= require orbit-1.0
 | ||||
| //= require tinymce-jquery
 | ||||
| //= require tinymce_orbit
 | ||||
| //= require orbit-bar-search
 | ||||
|  | @ -9,27 +9,14 @@ function resize() { | |||
| 	} | ||||
| } | ||||
| $(document).ready(function(){ | ||||
| 	$(document).on('click', '.orbit-bar-member', function(){ | ||||
| 		$(this).hasClass('open') ? $(this).removeClass('open') : $(this).addClass('open'); | ||||
| 		$('.bar-login .dropdown-menu').toggle(); | ||||
| 		return false; | ||||
| 	}); | ||||
| 
 | ||||
| 	$(document).click(function() { | ||||
| 		$('.orbit-bar-member').removeClass("open"); | ||||
| 		$('.bar-login .dropdown-menu').hide(); | ||||
| 	}); | ||||
| 
 | ||||
| 	$(document).on('click', '.bar-login .dropdown-menu', function(e) { | ||||
| 		e.stopPropagation(); | ||||
| 		$('.bar-login .dropdown-menu').show(); | ||||
| 	}); | ||||
| 	 | ||||
| 	$('.tip').tooltip({ | ||||
| 		placement: "left" | ||||
| 	}); | ||||
| 	 | ||||
| 	$(document).on('click', '.privacy', function() { | ||||
| 
 | ||||
| 			console.log($(this).val()); | ||||
| 		switch ($(this).val()) { | ||||
| 			case 'true': | ||||
| 			$(this).parents('.controls').children('.select-role').slideUp(300); | ||||
|  | @ -40,11 +27,6 @@ $(document).ready(function(){ | |||
| 		} | ||||
| 	}); | ||||
| 	 | ||||
| 	$(document).on('click', '.sort-header > .sort', function() { | ||||
| 		$.getScript($(this).attr('rel')); | ||||
| 	}); | ||||
| 	 | ||||
| 	 | ||||
| 	var $role = $('.select-role'); | ||||
| 	var method =$('.privacy:eq(1)').attr('checked'); | ||||
| 	if(method == 'checked'){ | ||||
|  | @ -73,7 +55,7 @@ $(document).ready(function(){ | |||
| 	$('#main-sidebar').tinyscrollbar(); | ||||
| 	$('.detal-list').tinyscrollbar(); | ||||
| 	$('#main-sidebar').tinyscrollbar({size:(viewportheight-34)}); | ||||
| 	mainTablePosition() | ||||
| 	mainTablePosition(); | ||||
| 
 | ||||
| 	/*isotope*/ | ||||
|   var $container = $('#isotope'); | ||||
|  | @ -92,16 +74,26 @@ $(window).resize(function(){ | |||
| 	$('.post-title').css("width", viewportwidth-495); | ||||
| 	$('#main-wrap > .subnav').css("width", viewportwidth-$mainWrapMarginLeft) | ||||
| 	$('#main-sidebar').tinyscrollbar({size:(viewportheight-34)}); | ||||
| 	mainTablePosition() | ||||
| 	mainTablePosition(); | ||||
| }); | ||||
| /*main-table position*/ | ||||
| function mainTablePosition() { | ||||
| 	var $height = $('#main-wrap > .subnav').height() | ||||
| 	var $table = $('#main-wrap > .table') | ||||
| 	//alert ($table.height())
 | ||||
| 	$table.stop().animate({marginTop:$height-17},500) | ||||
| 	//$table.css({marginTop : $height})
 | ||||
| } | ||||
| 	var $height = $('#main-wrap .subnav').length && $('#main-wrap .subnav').height(); | ||||
| 	var $table = $('#main-wrap > table').length && $('#main-wrap > table'); | ||||
| 	if($table && $table==0){ | ||||
| 		$table.css({marginTop:$height}); | ||||
| 	} | ||||
| 	else if($table){ | ||||
| 		if($height>0){ | ||||
| 			$height = $height-17; | ||||
| 		} | ||||
| 		$table.stop().animate({marginTop:$height},500); | ||||
| 	} | ||||
| 	else if($('#main-wrap .subnav')){ | ||||
| 		var $object = $('#main-wrap .subnav').next(); | ||||
| 		$object.css({marginTop:$height}); | ||||
| 	}; | ||||
| }; | ||||
| $(window).scroll(function () { | ||||
| 	//var $mainWrapMarginLeft = parseInt($('#main-wrap').css("margin-left"))-1;
 | ||||
| 	//var $subnavWidth = parseInt($('#main-wrap > .subnav').css("width"));
 | ||||
|  |  | |||
|  | @ -0,0 +1,15 @@ | |||
| $(document).on('click', '.orbit-bar-member', function(){ | ||||
| 		$(this).hasClass('open') ? $(this).removeClass('open') : $(this).addClass('open'); | ||||
| 		$('.bar-login .dropdown-menu').toggle(); | ||||
| 		return false; | ||||
| }); | ||||
| 
 | ||||
| $(document).click(function() { | ||||
| 	$('.orbit-bar-member').removeClass("open"); | ||||
| 	$('.bar-login .dropdown-menu').hide(); | ||||
| }); | ||||
| 
 | ||||
| $(document).on('click', '.bar-login .dropdown-menu', function(e) { | ||||
| 	e.stopPropagation(); | ||||
| 	$('.bar-login .dropdown-menu').show(); | ||||
| }); | ||||
|  | @ -0,0 +1,20 @@ | |||
| $(document).on('click', '.orbit-bar-search', function (){ | ||||
| 	if ($(this).parents('.search').hasClass('visible')){ | ||||
| 		$(this).parents('.search').stop().animate({ | ||||
| 			'width':'28px', | ||||
| 		}); | ||||
| 		$(this).parents('.search').css({ | ||||
| 			'background-color': 'transparent', | ||||
| 		});	 | ||||
| 		$(this).parents('.search').removeClass('visible');	 | ||||
| 	} | ||||
| 	else{ | ||||
| 		$(this).parents('.search').stop().animate({ | ||||
| 			'width':'265px', | ||||
| 		}); | ||||
| 		$(this).parents('.search').css({ | ||||
| 			'background-color': 'rgba(0, 0, 0, 0.5)', | ||||
| 		}); | ||||
| 		$(this).parents('.search').addClass('visible'); | ||||
| 	} | ||||
| }); | ||||
|  | @ -13,13 +13,21 @@ var orbitDesktop = function(dom){ | |||
| 	this.desktopData = {"home":"","settings":"","work":"","favorite":"","apps_manager":"","sections":""}; | ||||
| 	this.tp = ""; | ||||
| 	this.initialize = function(){ | ||||
| 		var theme = o.theme; | ||||
| 		$.getJSON("/"+o.themefolder+"/"+theme+"/settings/"+theme+".json",function(ts){ | ||||
| 			o.themesettings = eval(ts); | ||||
| 			$('head').append( $('<link rel="stylesheet" id="dyn_css" type="text/css" />').attr('href', "/"+o.themefolder+"/"+theme+"/css/"+ts.css)); | ||||
| 			$(document).ready(function(){o.loadWallpaper();o.bindDesktopEvents();o.loadIconCache();o.initializeDesktop();}); | ||||
| 			var theme = o.theme; | ||||
| 		$.getJSON("/desktop/get_desktop_settings",{id:o.desktopId},function(desktopSettings){ | ||||
| 			if(desktopSettings){ | ||||
| 				theme = desktopSettings.theme; | ||||
| 				o.theme = theme; | ||||
| 				loadTheme(); | ||||
| 			}else{loadTheme();} | ||||
| 		}) | ||||
| 	 | ||||
| 		var loadTheme = function(){ | ||||
| 			$.getJSON("/"+o.themefolder+"/"+theme+"/settings/"+theme+".json",function(ts){ | ||||
| 				o.themesettings = eval(ts); | ||||
| 				$('head').append( $('<link rel="stylesheet" id="dyn_css" type="text/css" />').attr('href', "/"+o.themefolder+"/"+theme+"/css/"+ts.css)); | ||||
| 				$(document).ready(function(){o.loadWallpaper();o.bindDesktopEvents();o.loadIconCache();o.initializeDesktop();}); | ||||
| 			}) | ||||
| 		} | ||||
| 	}; | ||||
| 	this.changeTheme = function(theme){ | ||||
| 		o.theme = theme; | ||||
|  | @ -69,12 +77,9 @@ var orbitDesktop = function(dom){ | |||
| 				}); | ||||
| 			} | ||||
| 		}); | ||||
| 		$("select#change_theme").change(function(){ | ||||
| 			o.changeTheme($(this).val());	 | ||||
| 		}) | ||||
| 		$(window).resize(function(){ | ||||
| 			var ww = $(window).width(); | ||||
| 			$("img#thmbackground").attr({"width":ww}) | ||||
| 			$("img#thmbackground").attr({"width":ww}); | ||||
| 		}); | ||||
| 		$(o.contentHolder).mousemove(function(event){ | ||||
| 			/*if(($(window).width()-50)<=event.pageX){ | ||||
|  | @ -84,6 +89,15 @@ var orbitDesktop = function(dom){ | |||
| 				$("#holder").animate({scrollLeft:0},1000); | ||||
| 			}*/ | ||||
| 		}); | ||||
| 			var $widget_fn = $('.widget_fn'),$fn_des = $('.fn_des'); | ||||
| 			$widget_fn.hover(function(){ | ||||
| 				var fn_name = $(this).find('img').attr('alt'),nth = $(this).parents('.d_cate').index(),des_left = $('.dock_child').eq(nth).width(); | ||||
| 				$(this).addClass('thmc1'); | ||||
| 				$fn_des.text(fn_name).css({'top':nth * 60,'left': des_left + 60}).stop(true, true).fadeIn(); | ||||
| 			},function(){ | ||||
| 				$(this).removeClass('thmc1'); | ||||
| 				$fn_des.stop(true, true).fadeOut(); | ||||
| 			}); | ||||
| 	}; | ||||
| 	this.initializeDesktop = function(target){ | ||||
| 		if(!target)target = "desktop"; | ||||
|  | @ -132,19 +146,39 @@ var orbitDesktop = function(dom){ | |||
| 			 | ||||
| 			}); | ||||
| 			$('#holder').tinyscrollbar({ axis: 'x'}); | ||||
| 			sdm(); | ||||
| 			$("div.scrollbar").hover(function(){ | ||||
| 				$(this).removeClass('op01'); | ||||
| 			}, function(){ | ||||
| 				$(this).addClass('op01'); | ||||
| 			}); | ||||
| 			var $sdm = $('.sdm'); | ||||
| 
 | ||||
| 			if( !$sdm.children('.sdm_o') ){ | ||||
| 				return; | ||||
| 			} else { | ||||
| 				$sdm.hover(function(){ | ||||
| 					$(this).addClass('thmc2'); | ||||
| 				}, function(){ | ||||
| 					$(this).removeClass('thmc2'); | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
| 		if(!o.desktopData[o.currentface]){ | ||||
| 			$(o.contentHolder).empty().load("/desktop/"+target,function(){ | ||||
| 				bindHandlers(); | ||||
| 				o.initializeWidgets(); | ||||
| 			}); | ||||
| 		}else{ | ||||
| 			$(o.contentHolder).html(o.desktopData[o.currentface]); | ||||
| 			bindHandlers(); | ||||
| 			o.initializeWidgets(); | ||||
| 		} | ||||
| 	}; | ||||
| 	this.tempFunc = function(){ | ||||
| 		o.notify("This is test notification!!","alert",2) | ||||
| 		//o.notify("This is test notification!!","alert",2)
 | ||||
| 		$.post("/desktop/save_desktop_settings",{"id":o.desktopId,"theme":$("#change_theme").val()},function(){ | ||||
| 			o.notify("Settings Saved!!","success"); | ||||
| 		}) | ||||
| 	} | ||||
| 	this.initializeAppSearch = function(target){ | ||||
| 		o.currenthtml = target; | ||||
|  | @ -190,6 +224,7 @@ var orbitDesktop = function(dom){ | |||
| 		if(!o.desktopData[o.currentface]){ | ||||
| 			$(o.contentHolder).empty().load("/desktop/"+target,function(){ | ||||
| 				bindHandlers(); | ||||
| 			 | ||||
| 			}); | ||||
| 		}else{ | ||||
| 			$(o.contentHolder).html(o.desktopData[o.currentface]); | ||||
|  | @ -220,15 +255,25 @@ var orbitDesktop = function(dom){ | |||
| 					} | ||||
| 					else | ||||
| 						$("#"+$(this).attr("data-category")).append(element); | ||||
| 		},over:function(){ | ||||
| 				    $(this).find('span.tile').removeClass('op06'); | ||||
| 				}, | ||||
| 				over:function(){ | ||||
| 					$(this).find('span.tile').removeClass('op06'); | ||||
| 				}, | ||||
| 				out:function(){ | ||||
| 				 out:function(){ | ||||
| 					$(this).find('span.tile').addClass('op06'); | ||||
| 				} | ||||
| 			}); | ||||
| 				 } | ||||
| 	 		}); | ||||
| 			$('#holder').tinyscrollbar({ axis: 'x'}); | ||||
| 			var $sdm = $('.sdm'); | ||||
| 
 | ||||
| 			if( !$sdm.children('.sdm_o') ){ | ||||
| 				return; | ||||
| 			} else { | ||||
| 				$sdm.hover(function(){ | ||||
| 					$(this).addClass('thmc2'); | ||||
| 				}, function(){ | ||||
| 					$(this).removeClass('thmc2'); | ||||
| 				}); | ||||
| 			} | ||||
| 		}; | ||||
| 		if(!o.desktopData[o.currentface]){ | ||||
| 			$(o.contentHolder).empty().load("/desktop/"+target,function(){ | ||||
|  | @ -240,6 +285,23 @@ var orbitDesktop = function(dom){ | |||
| 		} | ||||
| 		 | ||||
| 	}; | ||||
| 	this.initializeSettings = function(target){ | ||||
| 		o.currenthtml = target; | ||||
| 		o.currentface = "settings"; | ||||
| 		var bindHandlers = function(){ | ||||
| 			$("select#change_theme").change(function(){ | ||||
| 				o.changeTheme($(this).val());	 | ||||
| 			}) | ||||
| 		} | ||||
| 		if(!o.desktopData[o.currentface]){ | ||||
| 			$(o.contentHolder).empty().load("/desktop/"+target,function(){ | ||||
| 				bindHandlers(); | ||||
| 			}); | ||||
| 		}else{ | ||||
| 			$(o.contentHolder).html(o.desktopData[o.currentface]); | ||||
| 				bindHandlers();	 | ||||
| 		} | ||||
| 	}; | ||||
| 	this.loadWallpaper = function(wallpaper){ | ||||
| 		if(!wallpaper)wallpaper = o.themesettings.background; | ||||
| 		var ww = $(window).width(); | ||||
|  | @ -252,97 +314,33 @@ var orbitDesktop = function(dom){ | |||
| 		$("div#bgover").css({"position":"fixed","top":"0px","left":"0px","z-index":"-1","width":ww,"height":wh}); | ||||
| 	}; | ||||
| 	this.loadIconCache = function(){ | ||||
| 		$("#home_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.home); | ||||
| 		$("#app_manager_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.app_manager); | ||||
| 		$("#sections_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.sections); | ||||
| 		$("#settings_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.settings); | ||||
| 		$("#publication_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.publication); | ||||
| 		$("#journal_p_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.journal_p); | ||||
| 		$("#seminar_p_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.seminar_p); | ||||
| 		$("#books_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.books); | ||||
| 		$("#research_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.research); | ||||
| 		$("#research_d_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.research_d); | ||||
| 		$("#research_p_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.research_p); | ||||
| 		$("#patents_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.patents); | ||||
| 		$("#labs_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.labs); | ||||
| 		$("#experience_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.experience); | ||||
| 		$("#working_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.working); | ||||
| 		$("#education_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.education); | ||||
| 		$("#honors_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.honors); | ||||
| 		$("#activities_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.activities); | ||||
| 		$("#clubs_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.clubs); | ||||
| 		$("#landt_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.landt); | ||||
| 		$("#courses_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.courses); | ||||
| 		$("#homework_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.homework); | ||||
| 		$("#certification_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.certification); | ||||
| 		$("#personal_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.personal); | ||||
| 		$("#mypage_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.mypage); | ||||
| 		$("#blog_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.blog); | ||||
| 		$("#album_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.album); | ||||
| 		$("#calendar_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.calendar); | ||||
| 		$("#files_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.files); | ||||
| 		$("#orbit_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.orbit); | ||||
| 		$("#connection_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.connection); | ||||
| 		$("#appstore_icon").attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons.appstore); | ||||
| 	}; | ||||
| 	this.initializeSettings = function(target){ | ||||
| 		o.currenthtml = target; | ||||
| 		o.currentface = "settings"; | ||||
| 		if(!o.desktopData[o.currentface]){ | ||||
| 			$(o.contentHolder).empty().load("/desktop/"+target,function(){ | ||||
| 			//	bindHandlers();
 | ||||
| 			}); | ||||
| 		}else{ | ||||
| 			$(o.contentHolder).html(o.desktopData[o.currentface]); | ||||
| 			//	bindHandlers();	
 | ||||
| 		} | ||||
| 		var imgs = $("ul.docklist img"); | ||||
| 		$.each(imgs,function(){ | ||||
| 			var setting_name = $(this).attr("id").replace("_icon",""); | ||||
| 			$(this).attr("src","/"+o.themefolder+"/"+o.theme+"/images/"+o.themesettings.icons[setting_name]) | ||||
| 		}) | ||||
| 	}; | ||||
| 	this.initializeWidgets = function(){ | ||||
| 		var elements = $("#group_wrapper li.element"); | ||||
| 		$.each(elements,function(){ | ||||
| 			var widget = $(this); | ||||
| 			if(widget.attr("data-category")=="widget"){ | ||||
| 				var widgename =widget.attr("data-content"); | ||||
| 				$.getScript("/desktop_widgets/"+widgename+"/"+widgename+".js",function(){ | ||||
| 					widget.find("div.appholder").load("/desktop_widgets/"+widgename+"/index.html.erb"); | ||||
| 				}); | ||||
| 			//	$(this).find("div.appholder").append( $('<link rel="stylesheet" id="dyn_css" type="text/css" />').attr('href', "/desktop_widgets/"+widgename+"/css/"+widgename+".css"));
 | ||||
| 			} | ||||
| 				 | ||||
| 		}) | ||||
| 	} | ||||
| 	o.initialize(); | ||||
| } | ||||
| 
 | ||||
| orbitDesktop.prototype.themefolder = "themes"; | ||||
| orbitDesktop.prototype.widgetfolder = "desktop_widgets"; | ||||
| orbitDesktop.prototype.desktopId = "1"; | ||||
| orbitDesktop.prototype.notifyImgPath = "temp"; | ||||
| 
 | ||||
| // devin
 | ||||
| (function(){ | ||||
| 	$(document).ready(function(){ | ||||
| 		// dock effect
 | ||||
| 		var $widget_fn = $('.widget_fn'), | ||||
| 			$fn_des = $('.fn_des'); | ||||
| 
 | ||||
| 		$widget_fn.hover(function(){ | ||||
| 			var fn_name = $(this).find('img').attr('alt'), | ||||
| 				nth = $(this).parents('.d_cate').index(), | ||||
| 				des_left = $('.dock_child').eq(nth).width(); | ||||
| 
 | ||||
| 
 | ||||
| 			$(this).addClass('thmc1'); | ||||
| 			$fn_des | ||||
| 				.text(fn_name) | ||||
| 				.css({ | ||||
| 					'top':nth * 60, | ||||
| 					'left': des_left + 60 | ||||
| 				}) | ||||
| 				.stop(true, true) | ||||
| 				.fadeIn(); | ||||
| 		}, function(){ | ||||
| 			$(this).removeClass('thmc1'); | ||||
| 			$fn_des.stop(true, true).fadeOut(); | ||||
| 		}); | ||||
| 		 | ||||
| 	}); | ||||
| }()); | ||||
| 
 | ||||
| // Simple Dropdown Menu
 | ||||
| function sdm(){ | ||||
| 	var $sdm = $('.sdm'); | ||||
| 
 | ||||
| 	if( !$sdm.children('.sdm_o') ){ | ||||
| 		return; | ||||
| 	} else { | ||||
| 		$sdm.hover(function(){ | ||||
| 			$(this).addClass('thmc2'); | ||||
| 		}, function(){ | ||||
| 			$(this).removeClass('thmc2'); | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
|  | @ -33,7 +33,7 @@ var orbitDesktopAPI = function(){ | |||
| 			img = "note_alert.png"; | ||||
| 			break; | ||||
| 		} | ||||
| 		$notify.find("img#note_img").attr("src","/assets/"+img); | ||||
| 		$notify.find("img#note_img").attr("src",o.notifyImgPath+img); | ||||
| 		$notify.find(".note_message").text(msg); | ||||
| 		n_height = $notify.outerHeight(); | ||||
| 		if(!time)time=5000; else time=time*1000; | ||||
|  | @ -44,5 +44,3 @@ var orbitDesktopAPI = function(){ | |||
| 			.animate({top:-n_height,opacity:0},200); | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| orbitDesktopAPI.prototype.notifyImgPath = ""; | ||||
|  | @ -4,14 +4,13 @@ $(function() { | |||
|         plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", | ||||
| 
 | ||||
|         // Theme options
 | ||||
|         theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect", | ||||
|         theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor", | ||||
|         theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen", | ||||
|         theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage", | ||||
|         theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,fontselect,fontsizeselect", | ||||
|         theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,bullist,numlist,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,forecolor,backcolor", | ||||
|         theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,fullscreen", | ||||
|         theme_advanced_toolbar_location : "top", | ||||
|         theme_advanced_toolbar_align : "left", | ||||
|         theme_advanced_statusbar_location : "bottom", | ||||
|         theme_advanced_resizing : false, | ||||
|         theme_advanced_resizing : true, | ||||
| 
 | ||||
|         // Skin options
 | ||||
|         skin : "o2k7", | ||||
|  |  | |||
|  | @ -180,8 +180,8 @@ a, a:hover { text-decoration: none; } | |||
| 	width: 100%; | ||||
| 	height: 100%; | ||||
| 	padding: 0; | ||||
| 	left: 0; | ||||
| 	top: 0; | ||||
| /*	left: 0; | ||||
| 	top: 0; */ | ||||
| 	} | ||||
| .dtitle {  | ||||
| 	font-size: 30px; | ||||
|  |  | |||
|  | @ -0,0 +1,53 @@ | |||
| .checkblock { | ||||
| 	display: inline-block; | ||||
| 	float: left; | ||||
| 	width: 200px; | ||||
| } | ||||
| .check[type="checkbox"]{ | ||||
| 	display:none; | ||||
| } | ||||
| .checkbox{ | ||||
| 	padding:5px; | ||||
| 	margin:5px; | ||||
| 	display: inline-block; | ||||
| 	color:#777777; | ||||
| 	text-shadow: 0 1px 0px rgba(255,255,255,.4); | ||||
| 	border-radius: 3px; | ||||
| 	-moz-border-radius: 3px; | ||||
| 	-webkit-border-radius: 3px; | ||||
| 	height: 30px; | ||||
| 	position: relative; | ||||
| 	cursor: pointer; | ||||
| 	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); | ||||
| 	background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); | ||||
| 	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); | ||||
| 	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); | ||||
| 	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); | ||||
| 	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); | ||||
| } | ||||
| .checkbox .check-icon { | ||||
| 	display: none; | ||||
| 	position: absolute; | ||||
| 	width: 22px; | ||||
| 	height: 22px; | ||||
| 	border-radius: 11px; | ||||
| 	background-color: #d0f311; | ||||
| 	right: -5px; | ||||
|     top: -5px; | ||||
|     box-shadow: 0px 0px 5px rgba(0,0,0,.05); | ||||
| } | ||||
| .checkbox .check-icon i { | ||||
| 	margin: 1px 0 0 3px; | ||||
| } | ||||
| .checkbox .member-name { | ||||
| 	line-height: 30px; | ||||
| 	padding: 0 10px; | ||||
| } | ||||
| img.member-img { | ||||
|     display: inline-block; | ||||
|     float: left; | ||||
|     max-width: 30px; | ||||
| } | ||||
| .checked .check-icon { | ||||
| 	display: block; | ||||
| } | ||||
|  | @ -0,0 +1,205 @@ | |||
| div.datepicker { | ||||
| 	position: relative; | ||||
| 	font-family: Arial, Helvetica, sans-serif; | ||||
| 	font-size: 12px; | ||||
| 	height: 147px; | ||||
| 	cursor: default; | ||||
| 	display: none; | ||||
| } | ||||
| .datepickerContainer { | ||||
| 	padding: 10px; | ||||
| 	margin: 0 auto; | ||||
| } | ||||
| /* | ||||
| .datepickerBorderT { | ||||
| 	position: absolute; | ||||
| 	left: 10px; | ||||
| 	top: 0; | ||||
| 	right: 10px; | ||||
| 	height: 10px; | ||||
| 	background: url(../images/datepicker_t.png); | ||||
| } | ||||
| .datepickerBorderB { | ||||
| 	position: absolute; | ||||
| 	left: 10px; | ||||
| 	bottom: 0; | ||||
| 	right: 10px; | ||||
| 	height: 10px; | ||||
| 	background: url(../images/datepicker_b.png); | ||||
| } | ||||
| .datepickerBorderL { | ||||
| 	position: absolute; | ||||
| 	left: 0; | ||||
| 	bottom: 10px; | ||||
| 	top: 10px; | ||||
| 	width: 10px; | ||||
| 	background: url(../images/datepicker_l.png); | ||||
| } | ||||
| .datepickerBorderR { | ||||
| 	position: absolute; | ||||
| 	right: 0; | ||||
| 	bottom: 10px; | ||||
| 	top: 10px; | ||||
| 	width: 10px; | ||||
| 	background: url(../images/datepicker_r.png); | ||||
| } | ||||
| .datepickerBorderTL { | ||||
| 	position: absolute; | ||||
| 	top: 0; | ||||
| 	left: 0; | ||||
| 	width: 10px; | ||||
| 	height: 10px; | ||||
| 	background: url(../images/datepicker_tl.png); | ||||
| } | ||||
| .datepickerBorderTR { | ||||
| 	position: absolute; | ||||
| 	top: 0; | ||||
| 	right: 0; | ||||
| 	width: 10px; | ||||
| 	height: 10px; | ||||
| 	background: url(../images/datepicker_tr.png); | ||||
| } | ||||
| .datepickerBorderBL { | ||||
| 	position: absolute; | ||||
| 	bottom: 0; | ||||
| 	left: 0; | ||||
| 	width: 10px; | ||||
| 	height: 10px; | ||||
| 	background: url(../images/datepicker_bl.png); | ||||
| } | ||||
| .datepickerBorderBR { | ||||
| 	position: absolute; | ||||
| 	bottom: 0; | ||||
| 	right: 0; | ||||
| 	width: 10px; | ||||
| 	height: 10px; | ||||
| 	background: url(../images/datepicker_br.png); | ||||
| } | ||||
| */ | ||||
| .datepickerHidden { | ||||
| 	display: none; | ||||
| } | ||||
| div.datepicker table { | ||||
| 	width: 260px; | ||||
| 	border-collapse:collapse; | ||||
| } | ||||
| div.datepicker a { | ||||
| 	text-decoration: none; | ||||
| 	cursor: default; | ||||
| 	outline: none; | ||||
| } | ||||
| div.datepicker table td { | ||||
| 	text-align: right; | ||||
| 	padding: 0; | ||||
| 	margin: 0; | ||||
| } | ||||
| div.datepicker th { | ||||
| 	text-align: center; | ||||
| 	color: #999; | ||||
| 	font-weight: normal; | ||||
| } | ||||
| div.datepicker tbody th { | ||||
| 	/*text-align: left;*/ | ||||
| } | ||||
| div.datepicker tbody a { | ||||
| 	display: block; | ||||
| 	width: 100%; | ||||
| 	text-align: center; | ||||
| } | ||||
| .datepickerWeek a { | ||||
| 	color: #F60; | ||||
| } | ||||
| .datepickerWeek a:hover { | ||||
| 	color: #FC0 !important; | ||||
| } | ||||
| .datepickerDays a { | ||||
| 	width: 20px; | ||||
| 	line-height: 16px; | ||||
| 	height: 16px; | ||||
| 	padding-right: 2px; | ||||
| } | ||||
| .datepickerYears a, | ||||
| .datepickerMonths a{ | ||||
| 	width: 44px; | ||||
| 	line-height: 36px; | ||||
| 	height: 36px; | ||||
| 	text-align: center; | ||||
| } | ||||
| td.datepickerNotInMonth a { | ||||
| 	color: #666; | ||||
| } | ||||
| tbody.datepickerDays td.datepickerSelected{ | ||||
| 	background: #0088CC; | ||||
| } | ||||
| tbody.datepickerDays td.datepickerSelected a{ | ||||
| 	color: #FFF; | ||||
| } | ||||
| tbody.datepickerDays td.datepickerNotInMonth.datepickerSelected { | ||||
| 	background: #17384d; | ||||
| } | ||||
| tbody.datepickerYears td.datepickerSelected, | ||||
| tbody.datepickerMonths td.datepickerSelected{ | ||||
| 	background: #17384d; | ||||
| } | ||||
| div.datepicker a:hover, | ||||
| div.datepicker a:hover { | ||||
| 	color: #88c5eb; | ||||
| } | ||||
| div.datepicker td.datepickerNotInMonth a:hover { | ||||
| 	color: #999; | ||||
| } | ||||
| div.datepicker tbody th { | ||||
| 	/*text-align: left;*/ | ||||
| } | ||||
| .datepickerSpace div { | ||||
| 	width: 20px; | ||||
| } | ||||
| .datepickerGoNext a, | ||||
| .datepickerGoPrev a, | ||||
| .datepickerMonth a { | ||||
| 	text-align: center; | ||||
| 	height: 20px; | ||||
| 	line-height: 20px; | ||||
| } | ||||
| .datepickerGoNext a { | ||||
| 	float: right; | ||||
| 	width: 20px; | ||||
| } | ||||
| .datepickerGoPrev a { | ||||
| 	float: left; | ||||
| 	width: 20px; | ||||
| } | ||||
| table.datepickerViewDays tbody.datepickerMonths, | ||||
| table.datepickerViewDays tbody.datepickerYears { | ||||
| 	display: none; | ||||
| } | ||||
| table.datepickerViewMonths tbody.datepickerDays, | ||||
| table.datepickerViewMonths tbody.datepickerYears, | ||||
| table.datepickerViewMonths tr.datepickerDoW { | ||||
| 	display: none; | ||||
| } | ||||
| table.datepickerViewYears tbody.datepickerDays, | ||||
| table.datepickerViewYears tbody.datepickerMonths, | ||||
| table.datepickerViewYears tr.datepickerDoW { | ||||
| 	display: none; | ||||
| } | ||||
| td.datepickerDisabled a, | ||||
| td.datepickerDisabled.datepickerNotInMonth a{ | ||||
| 	color: #333; | ||||
| } | ||||
| td.datepickerDisabled a:hover { | ||||
| 	color: #333; | ||||
| } | ||||
| td.datepickerSpecial a { | ||||
| 	background: #700; | ||||
| } | ||||
| td.datepickerSpecial.datepickerSelected a { | ||||
| 	background: #a00; | ||||
| } | ||||
| 
 | ||||
| /*Layout*/ | ||||
| #widgetCalendar { | ||||
|     height: 0; | ||||
|     overflow: hidden; | ||||
| 	position: relative; | ||||
| } | ||||
|  | @ -1,4 +1,3 @@ | |||
| @import url(http://fonts.googleapis.com/css?family=Cuprum); | ||||
| @font-face{  | ||||
| 	font-family: 'WebSymbolsRegular'; | ||||
| 	src: url(<%= asset_path 'websymbols-regular-webfont.eot' %>); | ||||
|  | @ -50,18 +49,21 @@ | |||
| 	*/ | ||||
| } | ||||
| #orbit-bar .navbar-search { | ||||
| 	float: none; | ||||
| 	margin: 0 auto; | ||||
| 	text-align: center; | ||||
| 	left: 28px; | ||||
| 	margin: 0; | ||||
| 	position: absolute; | ||||
| 	text-align: right; | ||||
| 	top: -1px; | ||||
| } | ||||
| #orbit-bar .nav.pull-right { | ||||
| 	margin-right: -20px; | ||||
| } | ||||
| #orbit-bar .search-query { | ||||
| 	background-image: url(<%= asset_path 'main-search.png' %>); | ||||
| 	background-repeat: no-repeat; | ||||
| 	background-position: 5px 6px; | ||||
| 	padding-left: 25px; | ||||
| 	padding: 4px 9px; | ||||
| 	height: 12px; | ||||
|     margin-top: 3px; | ||||
|     border: 1px solid #333333; | ||||
|     font-size: 11px; | ||||
| 	/*background-color: rgba(255, 255, 255, 0.8); | ||||
| 	color: #333; | ||||
| 	text-shadow: 0px 1px 0px #FFF;*/ | ||||
|  | @ -70,7 +72,7 @@ | |||
| #orbit-bar .search-query:focus { | ||||
| 	/*background-color: rgba(255, 255, 255, 0.9); | ||||
| 	text-shadow: 0px 1px 0px #FFF;*/ | ||||
| 	background-position: 6px 7px; | ||||
| 	background-position: 5px 2px; | ||||
| } | ||||
| #orbit-bar .container { | ||||
| 	width:100%; | ||||
|  | @ -105,11 +107,16 @@ | |||
| 	text-indent: -9999px; | ||||
| 	padding:6px; | ||||
| } | ||||
| #orbit-bar .nav > li.search { | ||||
| 	overflow: hidden; | ||||
| 	width: 28px; | ||||
| 	position: relative; | ||||
| } | ||||
| #orbit-bar .nav > li > a.orbit-bar-home { | ||||
| 	background-position: -10px -10px; | ||||
| } | ||||
| #orbit-bar .nav > li > a.orbit-bar-desktop { | ||||
| 	background-position: -100px -4px; | ||||
| 	background-position: -106px -9px; | ||||
| } | ||||
| #orbit-bar .nav > li > a.orbit-bar-member { | ||||
| 	background-position: -4px -37px; | ||||
|  | @ -120,6 +127,10 @@ | |||
| #orbit-bar .nav > li > a.orbit-bar-language { | ||||
| 	background-position: -42px -42px; | ||||
| } | ||||
| #orbit-bar .nav > li > a.orbit-bar-search { | ||||
| 	background-position: -75px -10px; | ||||
| 	overflow: hidden; | ||||
| } | ||||
| .language-menu .active { | ||||
|   color: #ffffff; | ||||
|   text-decoration: none; | ||||
|  | @ -144,6 +155,9 @@ | |||
| 	float: left; | ||||
| 	max-width: 22px; | ||||
| } | ||||
| #orbit-bar .clear { | ||||
| 	clear: none; | ||||
| } | ||||
| #orbit-bar .account-menu { | ||||
| 	right: 5px; | ||||
| } | ||||
|  | @ -351,8 +365,6 @@ | |||
| 	border-top: none; | ||||
| } | ||||
| #post-body .editor { | ||||
| 	margin: 8px 0; | ||||
| 	width: 100%; | ||||
| } | ||||
| #post-body-content { | ||||
| 	margin-right: 320px; | ||||
|  | @ -390,6 +402,9 @@ | |||
| .filter .active a { | ||||
| 	color: #FFF; | ||||
| } | ||||
| .filter form { | ||||
|     margin: 5px 10px; | ||||
| } | ||||
| .filters { | ||||
| 	background-color: rgba(0,0,0,0.075); | ||||
| 	-webkit-box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.2); | ||||
|  | @ -510,6 +525,26 @@ | |||
| .active .web-symbol:after { | ||||
| 	content: "}"; | ||||
| } | ||||
| .img-peview { | ||||
| 	margin-left: 12px; | ||||
| } | ||||
| .popover img { | ||||
| 	max-height: 120px; | ||||
| 	max-width: 100%; | ||||
| } | ||||
| .popover-inner { | ||||
|     width: auto; | ||||
| } | ||||
| .popover-title { | ||||
|     padding: 5px; | ||||
| } | ||||
| .popover-content { | ||||
|     border-radius: 3px; | ||||
|     padding: 5px; | ||||
| } | ||||
| .popover-title { | ||||
| 	display: none; | ||||
| } | ||||
| /*icons*/ | ||||
| .the-icons i:after { | ||||
| 	content: attr(class); | ||||
|  | @ -628,6 +663,12 @@ | |||
| .icons-unlock { | ||||
| 	background-position: -192px -32px; | ||||
| } | ||||
| .icons-time { | ||||
| 	background-position: -448px -32px; | ||||
| } | ||||
| .icons-banner { | ||||
| 	background-position: -608px -32px; | ||||
| } | ||||
| /*3*/ | ||||
| .icons-content { | ||||
| 	background-position: -160px -66px; | ||||
|  | @ -776,6 +817,9 @@ | |||
| 	background-position: -224px -320px; | ||||
| } | ||||
| /*12*/ | ||||
| .icons-check-2 { | ||||
| 	background-position: -288px -352px; | ||||
| } | ||||
| .icons-star-thin { | ||||
| 	background-position: -416px -352px; | ||||
| } | ||||
|  |  | |||
|  | @ -63,28 +63,86 @@ | |||
| } | ||||
| .file-upload { | ||||
| 	position:relative; | ||||
| 	overflow: hidden; | ||||
| } | ||||
| .file-upload .file-name { | ||||
| 	display: inline-block; | ||||
| 	margin: 0 0 5px 5px; | ||||
| 	white-space: nowrap; | ||||
| 	width: 140px; | ||||
| 	overflow: hidden; | ||||
| 	border-style: solid; | ||||
| 	border-width: 1px 1px 1px 0; | ||||
| 	border-color: #CCC; | ||||
| 	display: inline-block; | ||||
| 	float: left; | ||||
| 	padding: 4px 10px; | ||||
| 	height: 18px; | ||||
| 	line-height: 18px; | ||||
| 	-webkit-border-radius: 0 3px 3px 0; | ||||
| 	-moz-border-radius: 0 3px 3px 0; | ||||
| 	border-radius: 0 3px 3px 0; | ||||
| 	text-align: left; | ||||
| 	margin: 0; | ||||
|     width: 182px; | ||||
| } | ||||
| .file-upload .upload { | ||||
| 	margin:0; | ||||
| 	padding:0; | ||||
| 	position:absolute; | ||||
| 	top:0; | ||||
| 	top: 0; | ||||
| 	left:0; | ||||
| 	opacity:.0; | ||||
| 	filter: alpha(opacity=100); | ||||
|     font-size: 60px; | ||||
|     left: -595px/9; | ||||
| 	filter: alpha(opacity: 0); | ||||
| 	outline: none; | ||||
| } | ||||
| .file-upload .upload:focus { | ||||
| 	position:absolute; | ||||
| } | ||||
| .upload-picture { | ||||
| 	margin-right: 5px; | ||||
| 	margin-bottom: 5px; | ||||
| 	text-align: center; | ||||
| 	width: 276px; | ||||
| 	overflow: hidden; | ||||
| 	height: 90px; | ||||
| } | ||||
| .upload-picture img { | ||||
|     left: 0; | ||||
|     margin-top: -15%; | ||||
|     width: 100%; | ||||
| } | ||||
| .widget-box .widgetInfo { | ||||
|     display: inline-block; | ||||
|     text-align: center; | ||||
|     width: 255px; | ||||
|     margin : 0px 0 5px; | ||||
|     padding: 5px 10px; | ||||
| } | ||||
| .file-upload .input-medium { | ||||
|     border-radius: 3px 3px 3px 3px !important; | ||||
|     width: 267px; | ||||
|     position: relative; | ||||
| 	z-index: 5; | ||||
| } | ||||
| #widget-link table { | ||||
| 	margin-bottom:0 | ||||
| } | ||||
| /*Date*/ | ||||
| .showDate { | ||||
| 	border-style: solid; | ||||
| 	border-width: 1px 0 1px 1px; | ||||
| 	border-color: #CCC; | ||||
| 	display: inline-block; | ||||
| 	float: left; | ||||
| 	padding: 4px 10px; | ||||
| 	height: 18px; | ||||
| 	line-height: 18px; | ||||
| 	-webkit-border-radius: 3px 0 0 3px; | ||||
| 	-moz-border-radius: 3px 0 0 3px; | ||||
| 	border-radius: 3px 0 0 3px; | ||||
| 	text-align: center; | ||||
| } | ||||
| .calendarInput { | ||||
| 	position: absolute; | ||||
| 	visibility: hidden; | ||||
| 	left: 11px; | ||||
| } | ||||
|  | @ -1,5 +1,5 @@ | |||
| class Admin::AdBannersController < ApplicationController | ||||
|   layout "admin" | ||||
|   layout "new_admin" | ||||
|   before_filter :authenticate_user! | ||||
|   before_filter :is_admin? | ||||
| 
 | ||||
|  | @ -10,11 +10,14 @@ class Admin::AdBannersController < ApplicationController | |||
|   end | ||||
|    | ||||
|   def show | ||||
|     @ad_banner = AdBanner.find(params[:id]) | ||||
|     @ad_banners = AdBanner.all | ||||
|     @active = AdBanner.find(params[:id]) | ||||
|     render :action => 'index' | ||||
|   end | ||||
|    | ||||
|   def new | ||||
|     @ad_banner = AdBanner.new | ||||
|     @ad_banners = AdBanner.all | ||||
|     render :action => 'index',:params => 'new' | ||||
|   end | ||||
|    | ||||
|   def create | ||||
|  | @ -36,8 +39,13 @@ class Admin::AdBannersController < ApplicationController | |||
|     redirect_to admin_ad_banners_url | ||||
|   end | ||||
|    | ||||
|   def destroy_ad_image | ||||
|      | ||||
|   end | ||||
|    | ||||
|   def index | ||||
|     @ad_banners = AdBanner.all | ||||
|       @active = @ad_banners.first | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | @ -0,0 +1,47 @@ | |||
| class Admin::AdImagesController < ApplicationController | ||||
|   layout 'new_admin' | ||||
|   before_filter :authenticate_user! | ||||
|   before_filter :is_admin? | ||||
|    | ||||
|   def edit | ||||
|     @ad_banner = AdBanner.find params[:ad_banner_id] | ||||
|     @ad_image = @ad_banner.ad_images.find params[:id] | ||||
|   end | ||||
|    | ||||
|   def update | ||||
|     @ad_banner = AdBanner.find params[:ad_banner_id] | ||||
|     @ad_image = AdImage.find params[:id] | ||||
|     @ad_image.update_attributes(params[:ad_image]) | ||||
|     @ad_image.to_save = true | ||||
|     @ad_image.save! | ||||
|     redirect_to  admin_ad_banner_path @ad_banner | ||||
|   end | ||||
|    | ||||
|   def new | ||||
|     @ad_image =AdImage.new  | ||||
|     #render :action => 'new',:url=> {:ad_banner_id => params.has_key?(:ad_banner_id)? params[:ad_banner_id],nil} | ||||
|   end | ||||
|    | ||||
|   def create | ||||
|     @ad_banner = AdBanner.find params[:ad_banner][:id] | ||||
|     ad_image = AdImage.new  params[:ad_image] | ||||
|     ad_image.to_save = true | ||||
|     @ad_banner.ad_images << ad_image | ||||
| 
 | ||||
|     if @ad_banner.save! | ||||
|       redirect_to  admin_ad_banner_path @ad_banner | ||||
|     end | ||||
| 
 | ||||
|   end | ||||
|    | ||||
|   def destroy | ||||
|     @ad_banner = AdBanner.find params[:ad_banner_id] | ||||
|     @ad_image = @ad_banner.ad_images.find params[:id] | ||||
|     if @ad_image.destroy | ||||
|       flash[:notice] = t('admin.success_destroy_ad_image') | ||||
|       redirect_to admin_ad_banner_path @ad_banner | ||||
|     end | ||||
|   end | ||||
|    | ||||
|    | ||||
| end | ||||
|  | @ -1,11 +1,12 @@ | |||
| class DesktopController< ApplicationController | ||||
|   layout 'desktop' | ||||
|    | ||||
|   before_filter :authenticate_user! | ||||
|   def index | ||||
|      | ||||
|     @desktop = current_user.desktop | ||||
|   end | ||||
|    | ||||
|   def desktop | ||||
|     | ||||
|     render :layout => false | ||||
|   end | ||||
|    | ||||
|  | @ -17,6 +18,18 @@ class DesktopController< ApplicationController | |||
|     render :layout => false | ||||
|   end | ||||
|    | ||||
|   def save_desktop_settings | ||||
|     @desktop = Desktop.find(params["id"]) | ||||
|     @desktop.update_attributes(:theme => params["theme"]) | ||||
|      a = Array.new | ||||
|      a << {"success"=>"true"} | ||||
|      render :json=>a.to_json | ||||
|   end | ||||
|    | ||||
|   def get_desktop_settings | ||||
|      @desktop = Desktop.find(params["id"]) | ||||
|      render :json => @desktop.to_json | ||||
|   end | ||||
|   def settings | ||||
|     render :layout => false | ||||
|   end | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ require 'mongo' | |||
| class GridfsController < ActionController::Metal | ||||
|    | ||||
|   def serve | ||||
|     gridfs_path = env["PATH_INFO"].gsub("/gridfs/", "") | ||||
|     gridfs_path = env["PATH_INFO"].gsub("/gridfs/", "").force_encoding("UTF-8") | ||||
|     begin | ||||
|       gridfs_file = Mongo::GridFileSystem.new(Mongoid.database).open(gridfs_path, 'r') | ||||
|       self.response_body = gridfs_file.read | ||||
|  |  | |||
|  | @ -1,2 +1,34 @@ | |||
| module Admin::AdBannerHelper | ||||
|   def preview_block(ad_banner)   | ||||
|       res ='' | ||||
|       #same code as in frontend backend parser | ||||
|       if ad_banner  | ||||
|         res << "<script type='text/javascript'> | ||||
|                 $(document).ready(function(){ $('#slideshow-#{ad_banner.title.dehumanize}').cycle({delay: -1000, fx: '#{ad_banner.ad_fx.nil?? 'fade': ad_banner.ad_fx}', timeoutFn: getTimeout }); }); | ||||
|                 </script>" | ||||
|         res << "<div id='slideshow-#{ad_banner.title.dehumanize}'>" | ||||
|          printable_ad_images = [] | ||||
|          ad_banner.ad_images.each do |ad_image| | ||||
|            if ad_image.display? | ||||
|              ad_image.weight.times do | ||||
|                printable_ad_images << ad_image | ||||
|             end | ||||
|            end | ||||
|           end | ||||
|            | ||||
|       printable_ad_images.shuffle! | ||||
|       printable_ad_images.each  do |ad_image|  #TODO Need Reflact | ||||
|         res << "<img src='#{ad_image.file}' " | ||||
|         res << "alt='#{ad_image.title || ' '}' " | ||||
|         res << "time_to_next='#{ad_banner.transition_sec}' " | ||||
|         res << "link_open='#{ad_image.link_open}' " | ||||
|         # res << "link_url='#{(ad_image.direct_to_after_click?? ad_image.out_link : ad_banner.context) || ' '}' " | ||||
|         res << "link_url='#{(ad_image.out_link || ad_banner.context || ' ')}' " | ||||
|         res << "/>"           | ||||
|       end | ||||
|       res << "</div>"   | ||||
|       res.html_safe | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | @ -0,0 +1,7 @@ | |||
| module Admin::AdImagesHelper | ||||
| 
 | ||||
|   def active_when_default_locale_eq locale | ||||
|     locale.to_sym == I18n.default_locale ? 'active': '' | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | @ -2,6 +2,12 @@ module ApplicationHelper | |||
| 
 | ||||
|   FLASH_NOTICE_KEYS = [:error, :notice, :warning] | ||||
|    | ||||
|   def site_valid_locales_default_head | ||||
|     index = @site_valid_locales.rindex I18n.default_locale.to_s | ||||
|     shift_out = @site_valid_locales.shift(index) | ||||
|     @site_valid_locales += shift_out | ||||
|   end | ||||
|    | ||||
|   def colorize_in_use_locale(locale) | ||||
|     @site_in_use_locales.include?(locale)? 'green' : 'red' | ||||
|   end | ||||
|  | @ -145,7 +151,8 @@ module ApplicationHelper | |||
|     javascripts << "<script type='text/javascript' src='/assets/bootstrap.js'></script>\n" | ||||
|     javascripts << "<script type='text/javascript' src='/assets/jquery.tinyscrollbar.min.js'></script>\n" | ||||
|     javascripts << "<script type='text/javascript' src='/assets/jquery.isotope.min.js'></script>\n" | ||||
|     javascripts << "<script type='text/javascript' src='/assets/orbit-1.0.js'></script>\n" | ||||
|     javascripts << "<script type='text/javascript' src='/assets/orbit-bar-member.js'></script>\n" | ||||
|     javascripts << "<script type='text/javascript' src='/assets/orbit-bar-search.js'></script>\n" | ||||
|     javascripts << "<script type='text/javascript' src='/assets/orbit_bar.js'></script>\n" | ||||
|     javascripts << "<script type='text/javascript' src='/assets/event.js'></script>\n" | ||||
|     page.design.javascripts.each do |js| | ||||
|  |  | |||
|  | @ -4,41 +4,32 @@ class AdBanner | |||
|   include Mongoid::MultiParameterAttributes | ||||
|    | ||||
|   field :title | ||||
|   field :picture_position | ||||
|   field :post_date,type: Date | ||||
|   field :unpost_date,type: Date | ||||
|   field :context | ||||
|   field :direct_to_after_click,type: Boolean | ||||
|   field :transition_sec,type: Integer | ||||
|   field :ad_fx  #TODO Design should explain | ||||
| 
 | ||||
|    | ||||
|   before_save :save_or_destroy | ||||
|    | ||||
|   embeds_many :ad_images, :cascade_callbacks => true | ||||
|   validates_uniqueness_of :title | ||||
|   has_many :ad_images , dependent: :delete | ||||
|    | ||||
|   FX_TYPES = ["blindX","blindY","blindZ","cover","curtainX","curtainY","fade","fadeZoom","growX","growY","scrollUp","scrollDown","scrollLeft","scrollRight","scrollHorz","scrollVert","shuffle","slideX","slideY","toss","turnUp","turnDown","turnLeft","turnRight","uncover","wipe","zoom"] | ||||
|    | ||||
|   def display? | ||||
|     if (self.post_date <= Date.today && (self.unpost_date.nil? || self.unpost_date>= Date.today))      | ||||
|       return true | ||||
|     end | ||||
|       return false | ||||
|   end | ||||
| 
 | ||||
|   def new_ad_images=(*attrs) | ||||
|      attrs[0].each  do |attr|   #Loop by JSs,Themes,Imgs | ||||
|        unless attr[:file].nil? | ||||
|          self.ad_images << AdImage.new(attr)         | ||||
|        end | ||||
|       end | ||||
|   end | ||||
|   # def new_ad_images(*attrs) | ||||
|   #   debugger | ||||
|   #   a=1 | ||||
|   #    attrs[0].each  do |attr|   #Loop by JSs,Themes,Imgs | ||||
|   #      unless attr[:file].nil? | ||||
|   #        self.ad_images << AdImage.new(attr)         | ||||
|   #      end | ||||
|   #     end | ||||
|   # end | ||||
|    | ||||
|   def existing_ad_images=(*attrs) | ||||
|      attrs[0].each  do |attr|   #Loop by JSs,Themes,Imgs | ||||
|          ad_image = self.ad_images.find attr[0] | ||||
|          ad_image.update_attributes(attr[1]) | ||||
|     end | ||||
|   end | ||||
|   # def existing_ad_images=(*attrs) | ||||
|   #    attrs[0].each  do |attr|   #Loop by JSs,Themes,Imgs | ||||
|   #        ad_image = self.ad_images.find attr[0] | ||||
|   #        ad_image.update_attributes(attr[1]) | ||||
|   #   end | ||||
|   # end | ||||
|    | ||||
|   def save_or_destroy | ||||
|     self.ad_images.each do |ad_image| | ||||
|  |  | |||
|  | @ -4,18 +4,45 @@ class AdImage | |||
| 
 | ||||
|   mount_uploader :file, ImageUploader | ||||
| 
 | ||||
|   field :time_to_next #Weight | ||||
|   field :picture_intro | ||||
|   field :out_link | ||||
|   field :link_open | ||||
|   has_one :title, :class_name => "I18nVariable", :as => :language_value, :autosave => true, :dependent => :destroy | ||||
|   has_one :context, :class_name => "I18nVariable", :as => :language_value, :autosave => true, :dependent => :destroy | ||||
|    | ||||
|   field :direct_to_after_click,type: Boolean | ||||
|    | ||||
|   field :weight ,type: Integer ,default: 1 | ||||
|   field :out_link #the link itself | ||||
|   field :link_open #how will the link be opened | ||||
|   LINK_OPEN_TYPES = ["new_window","local"] | ||||
|    | ||||
|   field :post_date,type: Date | ||||
|   field :unpost_date,type: Date | ||||
|    | ||||
|   field :to_save, :type => Boolean | ||||
|   field :to_destroy, :type => Boolean | ||||
|      | ||||
|   LINK_OPEN_TYPES = ["new_window","local"] | ||||
|   belongs_to :ad_banner | ||||
| 
 | ||||
|   # validates_numericality_of :weight, greater_than_or_equal_to: 1,less_than_or_equal_to: 10 | ||||
|   # validates_format_of :out_link, with: /(http:\/\/.*|)/ ,:message => 'Need a valid URL' | ||||
|   # validates_presence_of :post_date,:message => 'Need a valid post date' | ||||
|   attr_reader :parse_post_date,:parse_unpost_date | ||||
| 
 | ||||
|   def parse_post_date=(att) | ||||
|     self.post_date = (Date.parse att rescue nil) | ||||
|   end | ||||
|    | ||||
|    | ||||
|   embedded_in :ad_banner | ||||
|   def parse_unpost_date=(att) | ||||
|     self.unpost_date = (Date.parse att rescue nil) | ||||
|   end | ||||
| 
 | ||||
|   def display? | ||||
|     if (self.post_date <= Date.today && (self.unpost_date.nil? || self.unpost_date>= Date.today) rescue false)  | ||||
|       return true | ||||
|     end | ||||
|       return false | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|   def get_delay_time | ||||
|     time = '' | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| class Design | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|   include ParserLayout | ||||
| 
 | ||||
|   field :title | ||||
|   field :author | ||||
|  | @ -14,7 +15,7 @@ class Design | |||
|   embeds_one :reset_css, :class_name => "Stylesheet", :cascade_callbacks => true | ||||
|   embeds_many :themes, :cascade_callbacks => true | ||||
|   embeds_many :javascripts, :cascade_callbacks => true | ||||
|   embeds_many :images, :cascade_callbacks => true | ||||
|   embeds_many :images, :as => :design_image, :cascade_callbacks => true | ||||
|   # embeds_many :custom_images, :class_name => 'Image', :cascade_callbacks => true | ||||
|    | ||||
|   validates_presence_of :title | ||||
|  | @ -65,9 +66,6 @@ class Design | |||
|   protected | ||||
|    | ||||
|   def parse_css_for_images | ||||
|     self.images.each do |image| | ||||
|       image.save | ||||
|     end | ||||
|     if (self.default_css && self.default_css.changed) | ||||
|       self.default_css.parse_urls | ||||
|     end | ||||
|  | @ -76,6 +74,7 @@ class Design | |||
|         theme.parse_urls | ||||
|       end | ||||
|     end | ||||
|     parse_body_for_images(self) | ||||
|   end | ||||
|    | ||||
| end | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ class Stylesheet < DesignFile | |||
|       temp_file = File.new(dir + '/' + orig_file_name, 'w+') | ||||
|       temp_file.write content.force_encoding("UTF-8") | ||||
|       self.file = temp_file | ||||
|       self.save | ||||
|     }     | ||||
|   end | ||||
|    | ||||
|  |  | |||
|  | @ -0,0 +1,19 @@ | |||
| class Desktop | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|    | ||||
|   field :theme, default: "default" | ||||
|    | ||||
|   belongs_to :user | ||||
|   has_many  :sections, :autosave => true, :dependent => :destroy | ||||
| 
 | ||||
|   before_create :initialize_section | ||||
|    | ||||
|   def initialize_section | ||||
|     self.sections.build(name: "Desktop 1") | ||||
|     self.sections.build(name: "Desktop 2") | ||||
|     self.sections.build(name: "Desktop 3") | ||||
|     self.sections.build(name: "Desktop 4") | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | @ -0,0 +1,15 @@ | |||
| class Group | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|    | ||||
|   belongs_to :section | ||||
|   has_many :tiles, :autosave => true, :dependent => :destroy | ||||
|   before_create :initialize_tile | ||||
|    | ||||
|   def initialize_tile | ||||
|     self.tiles.build | ||||
|     self.tiles.build | ||||
|   end | ||||
|    | ||||
| end | ||||
|   | ||||
|  | @ -34,7 +34,7 @@ class Page < Item | |||
|   end | ||||
|    | ||||
|   def set_key | ||||
|     if title.new_record? | ||||
|     if title && title.new_record? | ||||
|       title.key = 'title' | ||||
|     end | ||||
|   end | ||||
|  |  | |||
|  | @ -0,0 +1,17 @@ | |||
| class Section | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|    | ||||
|   field :name | ||||
|    | ||||
|   belongs_to :desktop | ||||
|   has_many :groups, :autosave => true, :dependent => :destroy | ||||
|    | ||||
|   before_create :initialize_group | ||||
|    | ||||
|   def initialize_group | ||||
|     self.groups.build | ||||
|     self.groups.build | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | @ -0,0 +1,8 @@ | |||
| class Tile | ||||
|   include Mongoid::Document | ||||
|   include Mongoid::Timestamps | ||||
|    | ||||
|   belongs_to :group | ||||
|    | ||||
|    | ||||
| end | ||||
|  | @ -16,11 +16,13 @@ class User | |||
|   has_many :privilege_apps,  :inverse_of => :privilege_users, :class_name => "AppAuth" | ||||
|    | ||||
|   has_many :managing_apps,:class_name => "AppManager" | ||||
|    | ||||
|   has_one :desktop, :autosave => true, :dependent => :destroy | ||||
|   belongs_to :role | ||||
|   has_and_belongs_to_many :sub_roles | ||||
|   accepts_nested_attributes_for :attribute_values, :allow_destroy => true | ||||
|    | ||||
|   before_create :initialize_desktop | ||||
|    | ||||
|   def avb_apps | ||||
|     sub_role_ids_ary=self.sub_roles.collect{|t| t.id} | ||||
|     query1 = AppAuth.any_in({sub_role_ids: sub_role_ids_ary}).excludes(blocked_user_ids: self.id) | ||||
|  | @ -53,4 +55,8 @@ class User | |||
|     User.find(id) rescue nil | ||||
|   end | ||||
|    | ||||
|   def initialize_desktop | ||||
|     self.build_desktop | ||||
|   end | ||||
|    | ||||
| end | ||||
|  |  | |||
|  | @ -0,0 +1,19 @@ | |||
| <script type="text/javascript" src="/static/jquery.cycle.all.latest.js"></script> | ||||
| <div class="tab-pane <%= "active"  if ad_banner_tab==@active %>" id=<%= ad_banner_tab.title %>> | ||||
| 	<p>尺寸:</p> | ||||
| 
 | ||||
| 	<%= form_for ad_banner_tab,:url=> admin_ad_banner_path(ad_banner_tab),:method => :put,:class=>"input-medium" do |f| -%> | ||||
| 		<%= f.label :ad_fx, t('admin.ad.ab_fx') %> | ||||
| 		<%= f.select :ad_fx ,AdBanner::FX_TYPES %> | ||||
| 		<%= f.label :transition_sec, t('admin.ad.transition_sec') %> | ||||
| 		<%= f.text_field :transition_sec,:placeholder=>"3秒請輸入3000",:class=> "span3" %> <%= t("admin.ad.trans_unit_sec") %> | ||||
| 		<%= f.submit %> | ||||
| 		<%= f.submit 'Cancel',:type=>'reset' %> | ||||
| 	<div> | ||||
| 			<%= render :partial => "ad_image_update", :collection => ad_banner_tab.ad_images,:as => :ad_image,:locals=>{:ad_banner => ad_banner_tab}  %> | ||||
| 		<%#= render :partial => 'new_add_banner_file', :object => ad_banner_tab.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %> | ||||
| 			<%= link_to 'Add AdImage',new_admin_ad_banner_ad_image_path(ad_banner_tab) %> | ||||
| 	</div> | ||||
| 	<% end -%> | ||||
| 	<%= preview_block ad_banner_tab %> | ||||
| </div> | ||||
|  | @ -1,8 +0,0 @@ | |||
| <div id="basic_block" class="roles_block"> | ||||
| 	<%= image_tag ad_image.file %>  | ||||
| 	<p> | ||||
| 		Time to next: <%= ad_image.time_to_next %> | ||||
| 		Intro: <%= ad_image.picture_intro %> | ||||
| 		Out Link <%= link_to ad_image.out_link %>  by <%= ad_image.link_open %> | ||||
| 	</p> | ||||
| </div>	 | ||||
|  | @ -1,5 +0,0 @@ | |||
| Time: <%= f.text_field :time_to_next ,:class=> 'ad_time'%> | ||||
| Link:<%= f.text_field :out_link ,:class=> 'ad_out_link'%> | ||||
| Open Type <%= f.select :link_open ,AdImage::LINK_OPEN_TYPES %> | ||||
| 
 | ||||
| <%= f.hidden_field :to_save %> | ||||
|  | @ -1,8 +0,0 @@ | |||
| <div id="basic_block" class="roles_block"> | ||||
| 	<%= image_tag ad_image.file %>  | ||||
| 	<p> | ||||
| 		Time to next: <%= ad_image.time_to_next %> | ||||
| 		Intro: <%= ad_image.picture_intro %> | ||||
| 		Out Link <%= link_to ad_image.out_link %>  by <%= ad_image.link_open %> | ||||
| 	</p> | ||||
| </div>	 | ||||
|  | @ -1,9 +1,12 @@ | |||
| <%= fields_for "ad_banner[existing_ad_images][#{ad_image.id}]", ad_image do |f| %> | ||||
| 		<%= image_tag ad_image.file %>  | ||||
| 		<div> | ||||
| 			Destroy?<%= f.check_box :to_destroy %> | ||||
| 			<%= render :partial => "ad_image_form", :locals => { :f => f } %> | ||||
| 		</div> | ||||
| <% end %> | ||||
| 
 | ||||
| <li class="span3" id = 'asd'> | ||||
| 			<%= image_tag ad_image.file %>  | ||||
| 			<p> | ||||
| 				<%= ad_image.display? ? '[Showing]' : '[NotShawing]' %> | ||||
| 				<%= "#{ad_image.post_date ||'NeedReset'  }~#{ad_image.unpost_date || 'NeedReset'}" %> | ||||
| 			</p> | ||||
| 			<p> | ||||
| 				<%= link_to	'Edit',edit_admin_ad_banner_ad_image_path(ad_banner,ad_image),:class => 'btn btn-primary'  %> | ||||
| 				<%= link_to	'Del',admin_ad_banner_ad_image_path(ad_banner,ad_image),:class => 'btn',:method => :delete,:confirm => t('sure?') %> | ||||
| 			</p> | ||||
| </li> | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,53 +0,0 @@ | |||
| <% content_for :page_specific_css do %> | ||||
| 	<%#= javascript_include_tag "ad_banner" #this line  wont work %> | ||||
| 	<script type="text/javascript" src="<%= asset_path 'ad_banner' %>"></script>  | ||||
| <% end %> | ||||
| 
 | ||||
| 
 | ||||
| <p> | ||||
| 	<%= f.label :title, t('admin.title') %> | ||||
| 	<%= f.text_field :title, :class => 'text'   %> | ||||
| </p> | ||||
| <p> | ||||
| 	<%= f.label :picture_position, t('admin.picture_position') %> | ||||
| 	<%= f.text_field :picture_position, :class => 'text' %> | ||||
| </p> | ||||
| 
 | ||||
| <p> | ||||
| 	<%= f.label :post_date, t('admin.post_date') %> | ||||
|   <%= f.date_select :post_date, :order => [:year, :month, :day], :use_month_numbers => true %> | ||||
| </p> | ||||
| 
 | ||||
| <p> | ||||
| 	<%= f.label :unpost_date, t('admin.unpost_date') %> | ||||
|   <%= f.date_select :unpost_date, :order => [:year, :month, :day], :use_month_numbers => true,:prompt => { :day => t('form.date_unlimited'), :month => t('form.date_unlimited'), :year => t('form.date_unlimited') } %> | ||||
| </p> | ||||
| <p> | ||||
| 	<%= f.label :context, t('admin.context') %> | ||||
| 	<%= f.text_field :context, :class => 'text' %> | ||||
| 	 | ||||
| </p> | ||||
| <p> | ||||
| 	<%= f.label :direct_to_after_click, t('admin.direct_to_after_click') %> | ||||
| 	<%= f.check_box :direct_to_after_click %> | ||||
| </p> | ||||
| <p> | ||||
| 	<%= f.label :ad_fx, t('admin.ad_fx') %> | ||||
| 	<%= f.select :ad_fx ,AdBanner::FX_TYPES %> | ||||
| </p> | ||||
| <p> | ||||
| 	<%#= f.label :ad_images, t('admin.ad_images') %> | ||||
| 
 | ||||
| 		<%# @ad_banner.ad_images.each do |ad_image| %> | ||||
| 			<%#= render :partial => 'ad_image_update', :object => ad_image, :locals => { :field_name => "ad_images", :f => f, :classes => "r_destroy, r_edit" } %> | ||||
| 		<%# end %> | ||||
| 		<%= render :partial => "ad_image_update", :collection => @ad_banner.ad_images,:as => :ad_image,  %> | ||||
| 	<ul id="new_add_banner_file_holder"></ul> | ||||
| 	<%= render :partial => 'new_add_banner_file', :object => @ad_banner.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %> | ||||
| </p> | ||||
| 
 | ||||
| <p> | ||||
| 
 | ||||
| 	 | ||||
| 	<%#= render :partial => 'new_design_file', :object => @design.themes.build, :locals => { :field_name => "themes", :f => f, :classes => "r_destroy" } %> | ||||
| </p> | ||||
|  | @ -0,0 +1,40 @@ | |||
| <script type="text/javascript" charset="utf-8"> | ||||
| </script> | ||||
| 
 | ||||
| <div id="new-a-banner" class="modal fade in tab-pane <%= 'active' if @active.nil? %>"> | ||||
| 	<%= form_for(:ad_banner,:remote => true, :url => admin_ad_banners_path) do |f| %> | ||||
| 
 | ||||
| 	<div class="modal-header"> | ||||
| 		<a class="close" data-dismiss="modal">×</a> | ||||
| 		<h3>Add AdBanner</h3> | ||||
| 	</div> | ||||
| 	 | ||||
| 	<div class="modal-body form-horizontal"> | ||||
| 		<div class="control-group"> | ||||
| 			<%= f.label :title,t('admin.ad.title'),:class => "control-label"  %> | ||||
| 			<div class="controls"> | ||||
| 				<%= f.text_field :title %> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<div class="control-group"> | ||||
| 			<%= f.label :transition_sec, t('admin.ad.transition_sec'),:class => "control-label" %> | ||||
| 			<div class="controls"> | ||||
| 				<%= f.text_field :transition_sec %> <%= t("admin.ad.trans_unit_sec") %> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		 | ||||
| 		<div class="control-group"> | ||||
| 			<%= f.label :ad_fx, t('admin.ad.ab_fx') %> | ||||
| 			<div class="controls"> | ||||
| 				<%= f.select :ad_fx ,AdBanner::FX_TYPES %> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<div class="modal-footer"> | ||||
| 			<%= f.submit t('submit'), :class=>'btn btn-primary' %> | ||||
| 			<a class="btn" data-dismiss="modal"><%= t('cancel')%></a> | ||||
| 		</div> | ||||
| 	<% end %> | ||||
| </div> | ||||
| 
 | ||||
|  | @ -1,7 +1,7 @@ | |||
| <%= f.fields_for field_name, new_add_banner_file do |f| %> | ||||
| 	<p class="new_file">		 | ||||
| 	  <%= f.file_field :file %> | ||||
| 		<%= render :partial => "ad_image_form", :locals => { :f => f } %> | ||||
| 		<%#= render :partial => "ad_image_form", :locals => { :f => f } %> | ||||
| 		<%= button_tag '+', :class => "multi_files"%> | ||||
| 	</p> | ||||
| <% end %> | ||||
|  | @ -1,11 +0,0 @@ | |||
| <div id="search"> | ||||
| 	<input id="user_search" name="user[username]" size="30" type="text" /> | ||||
| </div> | ||||
| <div class="member_setup <%= @class %>"> | ||||
| 	<h1><%= t('admin.setup_member') %></h1> | ||||
| 	<ul class="list"> | ||||
| 		<li class="set_1"><%= link_to content_tag(:span, t('admin.list_users')), admin_users_path %></li> | ||||
| 		<li class="set_2"><%= link_to content_tag(:span, t('admin.list_roles')), admin_roles_path %></li> | ||||
| 		<li class="set_3"><%= link_to content_tag(:span, t('admin.list_infos')), admin_infos_path %></li> | ||||
| 	</ul>	 | ||||
| </div> | ||||
|  | @ -1,11 +0,0 @@ | |||
| <h1><%= t('admin.editing_ad_banner') %></h1> | ||||
| 
 | ||||
| <%= form_for @ad_banner, :url => admin_ad_banner_path(@ad_banner),:html => {:multipart => true} do |f| %> | ||||
|   <%= f.error_messages %> | ||||
|   <%= render :partial => "form", :locals => { :f => f } %> | ||||
|   <p> | ||||
|     <%= f.submit t('update') %> <%= link_back %> | ||||
|   </p> | ||||
| <% end %> | ||||
| 
 | ||||
| <br /><br/> | ||||
|  | @ -1,48 +1,16 @@ | |||
| <% content_for :secondary do %> | ||||
| <div class="ad_banners_setup"> | ||||
| 	<h1><%= t('admin.setup_ad_banners') %></h1> | ||||
| 	<ul class="list"> | ||||
| 		<li><%= link_to content_tag(:span, t('admin.new_ad_banner')), new_admin_ad_banner_path, :class => 'seclink1' %></li> | ||||
| <div id="post-body-content" class="clear"> | ||||
| 	<ul class="nav nav-tabs"> | ||||
| 		<% @ad_banners.each do |ab| %> | ||||
| 			<%= content_tag :li,link_to(ab.title,"##{ab.title}",:data=>{:toggle=>"tab"}),:class => (ab ==  @active ? 'active' : '' ) %> | ||||
| 		<% end -%> | ||||
| 		<%= content_tag :li,link_to('New',"#new-a-banner",:data=>{:toggle=>"tab"}),:class => (@active.nil? ? 'active' : '' ) %> | ||||
| 		 | ||||
| 	</ul> | ||||
| </div> | ||||
| <% end -%> | ||||
| 	 | ||||
| <%= flash_messages %> | ||||
| <div class="main2"> | ||||
| <h1><%= t('admin.list_ad_banners') %></h1> | ||||
| 	<div class="tab-content"> | ||||
| 		<%= render :partial => 'ad_banner_tab',:collection => @ad_banners %>		 | ||||
| 		<%= render :partial => "modal_ad_banner_form"%> | ||||
| 	</div> | ||||
| 		 | ||||
| <table> | ||||
| <thead> | ||||
|   <tr> | ||||
|     <td><%= t('admin.title') %></td> | ||||
|     <td><%= t('admin.picture_position') %></td> | ||||
|     <td><%= t('admin.post_date') %></td> | ||||
|     <td><%= t('admin.unpost_date') %></td> | ||||
|     <td><%= t('admin.context') %></td> | ||||
|     <td><%= t('admin.direct_to_after_click') %></td> | ||||
|     <td><%= t('admin.now_display?') %></td> | ||||
|   </tr> | ||||
| </thead> | ||||
| <% @ad_banners.each do |ad_banner| %> | ||||
|   <tr class="have"> | ||||
|     <td><%= ad_banner.title %></td> | ||||
|     <td><%= ad_banner.picture_position %></td> | ||||
|     <td><%= ad_banner.post_date %></td> | ||||
|     <td><%= ad_banner.unpost_date.nil?? t('form.date_unlimited'): ad_banner.unpost_date %></td> | ||||
|     <td><%= ad_banner.context %></td> | ||||
|     <td><%= ad_banner.direct_to_after_click %></td> | ||||
|     <td><%= ad_banner.display?  %></td>  | ||||
|    <td class="action"> | ||||
| 			<%= link_to t(:show), admin_ad_banner_path(ad_banner), :class => 'show' %> | ||||
|       <%= link_to t(:edit), edit_admin_ad_banner_path(ad_banner), :class => 'edit'  %> | ||||
|       <%= link_to t(:delete), admin_ad_banner_path(ad_banner), :confirm => t('sure?'), :method => :delete, :class => 'delete' %> | ||||
|     </td> | ||||
|   </tr> | ||||
|   <tr></tr> | ||||
| <% end %> | ||||
| </table> | ||||
| </div> | ||||
| 
 | ||||
| <div class="button_bar"> | ||||
| 	<%= link_to t('admin.new_ad_banner'), new_admin_ad_banner_path, :class => 'new' %> | ||||
| </div> | ||||
|  | @ -1,13 +0,0 @@ | |||
| <div class="main2"> | ||||
| 	<h1><%= t('admin.new_ad_banner') %></h1> | ||||
| 
 | ||||
| 	<%= form_for :ad_banner, :url => admin_ad_banners_path, :html => {:multipart => true} do |f| %> | ||||
| 	  <%= f.error_messages %> | ||||
| 	  <%= render :partial => "form", :locals => { :f => f } %> | ||||
| 	   | ||||
| 	  <div class="button_bar"> | ||||
|     	<%= link_back %> | ||||
| 		<%= f.submit t('create') %> | ||||
| 	  </div> | ||||
| 	<% end %> | ||||
| </div> | ||||
|  | @ -1,17 +0,0 @@ | |||
| <% content_for :secondary do %> | ||||
| 	<%= render 'side_bar' %> | ||||
| <% end %> | ||||
| <br /><br /><br /><br /> | ||||
| 
 | ||||
| 	<ul> | ||||
| 		<li><%=t('admin.ad_banner.title') %> <%= @ad_banner.title %></li> | ||||
| 		<li><%=t('admin.ad_banner.picture_position') %> <%= @ad_banner.picture_position %></li> | ||||
| 		<li><%=t('admin.ad_banner.post_date') %> <%= @ad_banner.post_date %></li> | ||||
| 		<li><%=t('admin.ad_banner.unpost_date') %> <%= @ad_banner.unpost_date %></li> | ||||
| 		<li><%=t('admin.ad_banner.context') %> <%= @ad_banner.context %></li> | ||||
| 		<li><%=t('admin.ad_banner.direct_to_after_click') %> <%= @ad_banner.direct_to_after_click %></li> | ||||
| 		<li><%=t('admin.ad_banner.ad_fx') %> <%= @ad_banner.ad_fx %></li> | ||||
| 	</ul> | ||||
| 
 | ||||
| 	<%= render :partial => "admin/ad_banners/ad_image_show", :collection =>  @ad_banner.ad_images,:as => :ad_image %> | ||||
| 
 | ||||
|  | @ -0,0 +1,186 @@ | |||
| <% content_for :page_specific_css do %> | ||||
| 	<%= stylesheet_link_tag "lib/datepicker"  %> | ||||
| <% end %> | ||||
| <% content_for :page_specific_javascript do %> | ||||
| 	<%= javascript_include_tag "lib/datepicker"  %> | ||||
| 	<%= javascript_include_tag "lib/date.format"  %> | ||||
| <% end %> | ||||
| 
 | ||||
| 
 | ||||
| <div id="poststuff"> | ||||
| 	<form class="clear"> | ||||
| 		<!--Widget start--> | ||||
| 		<div id="sub-wiget"> | ||||
|           <div id="widget-date" class="widget-box"> | ||||
|               <div class="widget-action clear"> | ||||
|                   <a href="#" class="action"><i title="Set the announcement to start and end dates" class="icon-exclamation-sign icon-white tip"></i></a> | ||||
|               </div> | ||||
|               <h3 class="widget-title"><i class="icons-calendar icons-white"></i> Date</h3> | ||||
|               <div class="widget-content clear"> | ||||
|                   <div id="calendarRange"> | ||||
|                       <div class="input-append"> | ||||
|                           <span class="showDate"></span><span class="add-on btn">▼</span> | ||||
| 													<%= f.hidden_field :parse_post_date %> | ||||
| 													<%= f.hidden_field :parse_unpost_date%> | ||||
| 
 | ||||
|                       </div> | ||||
|                       <div id="widgetCalendar"> | ||||
|                       </div> | ||||
|                   </div> | ||||
|                   <script type="text/javascript"> | ||||
|                       var today = new Date(); | ||||
|                       today = today.format('isoDate'); | ||||
|                       var state = false; | ||||
|                       var arr = state ? "▼" : "▲" | ||||
|                       //calendarRange | ||||
|                       $('#calendarRange .showDate').html(today+" - "+today) | ||||
|                       $('#calendarRange .calendarInput').val(today+" - "+today); | ||||
|                       $('#calendarRange #widgetCalendar').DatePicker({ | ||||
|                           flat: true, | ||||
|                           format: 'Y / m / d', | ||||
|                           date: today, | ||||
|                           calendars: 1, | ||||
|                           mode: 'range', | ||||
|                           starts: 1, | ||||
|                           onChange: function(formated) { | ||||
|                               $('#calendarRange .showDate').get(0).innerHTML = formated.join(' - '); | ||||
|                               $('#calendarRange .calendarInput').val(formated.join(' - ')); | ||||
| 															start_date = formated[0].replace(/\s/g, ""); | ||||
| 															end_date = formated[1].replace(/\s/g, ""); | ||||
| 															$('#ad_image_parse_post_date').val(start_date); | ||||
| 															$('#ad_image_parse_unpost_date').val(end_date); | ||||
|                           } | ||||
|                       }); | ||||
|                       $('#calendarRange .input-append').bind('click', function(){ | ||||
|                           var arr = state ? "▼" : "▲" | ||||
|                           $('#calendarRange .add-on').html(arr); | ||||
|                           $('#calendarRange #widgetCalendar').stop().animate({height: state ? 0 : $('#calendarRange #widgetCalendar div.datepicker').get(0).offsetHeight}, 500); | ||||
|                           state = !state; | ||||
|                           return false; | ||||
|                       }); | ||||
|                       $('#calendarRange #widgetCalendar div.datepicker').css('position', 'absolute'); | ||||
|                   </script>   | ||||
|               </div> | ||||
|           </div> | ||||
| 		 | ||||
| 			<div id="widget-picture" class="widget-box"> | ||||
|         <div class="widget-action clear"> | ||||
|             <a class="action"><i title="Upload pictures" class="icon-exclamation-sign icon-white tip"></i></a> | ||||
|         </div> | ||||
|         <h3 class="widget-title"><i class="icons-picture icons-white"></i>Picture</h3> | ||||
|         <div class="widget-content clear">          | ||||
|             <div class="control-group"> | ||||
|                 <div  class="upload-picture"> | ||||
|                     <!--請程式務必將圖片尺寸加入到行內裡--> | ||||
|                     <%= image_tag @ad_image.file,:width=> "456",:height=>'700' rescue ''%> | ||||
|                     <script type="text/javascript"> | ||||
|                         var picH = $('.upload-picture').width()/$('.upload-picture').find('img').attr("width")*$('.upload-picture').find('img').attr("height") | ||||
|                         var imgMarginTop = ($('.upload-picture').height()-picH)/2; | ||||
|                         var d = $('.upload-picture').height(); | ||||
|                         if(imgMarginTop>0){ | ||||
|                             imgMarginTop = 0; | ||||
|                             d = picH; | ||||
|                             $('.upload-picture').css({height:d}) | ||||
|                         } | ||||
|                         $('.upload-picture').find('img').css({marginTop:imgMarginTop}) | ||||
|                         $('.upload-picture').each(function (i){ | ||||
|                             $(this).mouseenter(function(){ | ||||
|                                 var h= picH; | ||||
|                                 $(this).stop().animate({height:h}, 500); | ||||
|                                 $(this).find('img').stop().animate({marginTop:0}, 500); | ||||
|                             }); | ||||
|                             $(this).mouseleave(function(){ | ||||
|                                 $(this).stop().animate({height:d}, 500); | ||||
|                                 $(this).find('img').stop().animate({marginTop:imgMarginTop}, 500); | ||||
|                             }); | ||||
|                         }); | ||||
|                     </script> | ||||
|                 </div> | ||||
|                 <span class="alert widgetInfo">此區塊圖片尺寸請使用580px × 225px</span> | ||||
|                 <div class="controls file-upload input-prepend"> | ||||
|                     <label class="control-label add-on btn" for="input-upload"> | ||||
| 									Choose file | ||||
| 									 | ||||
| 									<%= f.file_field :file,:id=>"input-upload",:class => "upload", :onchange=> "document.getElementById('fu1').innerHTML = this.form.fu1.value = this.value;" %> | ||||
| 								</label> | ||||
| 								<span id="fu1" class="file-name"></span> | ||||
| 								<br> | ||||
| 
 | ||||
| 								 | ||||
| 								<input name="fu1" class="input-medium" type="text"> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				 | ||||
| 			<div id="widget-type" class="widget-box"> | ||||
| 					<div class="widget-action clear"> | ||||
| 						<a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Upload pictures"></i></a> | ||||
| 					</div> | ||||
| 					<h3 class="widget-title"><i class="icons-star-thin icons-white"></i>Type</h3> | ||||
| 					<div class="widget-content clear"> | ||||
| 						<%= f.select :link_open ,AdImage::LINK_OPEN_TYPES%> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			 | ||||
| 			<div id="widget-time" class="widget-box widget-size-300"> | ||||
| 					<div class="widget-action clear"> | ||||
| 						<a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Set the range time"></i></a> | ||||
| 					</div> | ||||
| 					<h3 class="widget-title"><i class="icons-time icons-white"></i>FEQ</h3> | ||||
| 					<div class="widget-content clear"> | ||||
| 						 <%= f.text_field :weight ,:class=> 'span3',:placeholder=>"在套圖中出現次數 1次請輸入1" %> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				 | ||||
| 			<div id="widget-link" class="widget-box widget-size-300"> | ||||
| 					<div class="widget-action clear"> | ||||
| 						<a class="action"><i class="icon-exclamation-sign icon-white tip" data-original-title="Add a reference link"></i></a> | ||||
| 					</div> | ||||
| 					<h3 class="widget-title"><i class="icons-link icons-white"></i>Link</h3> | ||||
| 					<div class="widget-content clear"> | ||||
| 						<%= f.text_field :out_link ,:class=> 'span3',:placeholder => "輸入連結"%> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 
 | ||||
| 		</div> | ||||
| 			<!--Wiget End--> | ||||
| 			<!--Post Start--> | ||||
| 			<div id="post-body"> | ||||
| 				<div id="post-body-content" class="clear"> | ||||
| 					<ul class="nav nav-tabs"> | ||||
| 						<% site_valid_locales_default_head.each do |locale|%> | ||||
| 							<%= content_tag :li,link_to(I18nVariable.from_locale(locale),"##{locale}",:data=>{:toggle => "tab"}),:class=> (active_when_default_locale_eq locale)  %> | ||||
| 						<% end %> | ||||
| 					</ul> | ||||
| 					<div class="tab-content"> | ||||
| 						<%= select_tag 'ad_banner[id]',options_from_collection_for_select(AdBanner.all, "id", "title",params[:ad_banner_id]) , :class=>"input-medium",   %> | ||||
| 						<% site_valid_locales_default_head.each do |locale|%> | ||||
| 							<%= content_tag :div,:class	=> "tab-pane #{active_when_default_locale_eq locale}",:id=>"#{locale}" do%> | ||||
| 								<div class="title"> | ||||
| 									<%= f.fields_for :title,@ad_image.title do |f| %> | ||||
| 										<%= f.text_field locale,:class=>"ad_image-title",:placeholder => "輸入標題"%> | ||||
| 									<% end %> | ||||
| 								</div> | ||||
| 							 | ||||
| 								<div class="context editor"> | ||||
| 									<%= f.fields_for :context, @ad_image.context do |f| %> | ||||
| 										<%= f.text_area locale,:style => "width:100%", :class => "asd_tinymce_textarea" %> | ||||
| 									<% end %> | ||||
| 								</div> | ||||
| 
 | ||||
| 							<% end %> | ||||
| 						<% end %> | ||||
| 						</div> | ||||
| 						 | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<!--Post End--> | ||||
| 			<div class="form-actions"> | ||||
| 				<button class="btn btn-success" type="submit">Preview/預覽</button> | ||||
| 				<button class="btn btn-primary" type="submit">Submit/送出</button> | ||||
| 				<button class="btn" type="reset">Cancel/取消</button> | ||||
| 			</div> | ||||
| 		</form> | ||||
| 	</div> | ||||
|  | @ -0,0 +1,8 @@ | |||
| <%= flash_messages %> | ||||
| 
 | ||||
| <%= form_for @ad_image, :url => admin_ad_banner_ad_image_path, :html => { :class => 'form' } do |f| %> | ||||
|    | ||||
|   <%= render :partial => "form", :locals => { :f => f } %> | ||||
| 
 | ||||
|    | ||||
| <% end %> | ||||
|  | @ -0,0 +1,8 @@ | |||
| <%= flash_messages %> | ||||
| 
 | ||||
| <%= form_for @ad_image, :url => create_ad_image_admin_ad_banners_path, :html => { :class => 'form' ,:multipart => true} do |f| %> | ||||
|    | ||||
|   <%= render :partial => "form", :locals => { :f => f } %> | ||||
|    | ||||
|    | ||||
| <% end %> | ||||
|  | @ -25,7 +25,7 @@ | |||
| </p> | ||||
| <p> | ||||
| 	<%= t('admin.module_app') %> | ||||
| 	<%= render :partial => "admin/module_apps/app_selector", :locals => { :f => f } %> | ||||
| 	<%= render :partial => "app_selector", :locals => { :f => f } %> | ||||
| 	<span id="app_page_url"><%= select('page','app_frontend_url', @app_frontend_urls, :selected => @item.app_frontend_url ) rescue ''%> </span> | ||||
| 	<span id="app_page_category"><%= select('page','category', @categories.collect{|category| [category.i18n_variable[I18n.locale], category.id]}, :selected => @item[:category] ) rescue ''%> </span> | ||||
| </p> | ||||
|  |  | |||
|  | @ -1,8 +1,13 @@ | |||
| <div id="<%= dom_id tag %>" > | ||||
| <div id="<%= dom_id tag %>" class="tag clear"> | ||||
| 	<div class="tagitem"> | ||||
| 	<i class="icons-tag"></i> | ||||
| 	<% @site_valid_locales.each do |locale| %> | ||||
| 	  <%= I18nVariable.from_locale(locale) %>: | ||||
| 	 	<%#= I18nVariable.from_locale(locale) %> | ||||
| 		<%= tag[locale] %> | ||||
| 	<% end %> | ||||
| 	</div> | ||||
| 	<div class="action"> | ||||
| 	<%= link_to t(:edit), edit_admin_tag_path(tag), :remote => true  %> | ||||
| 	<%= link_to t(:delete), admin_tag_path(tag), :confirm => t('sure?'), :method => :delete, :remote => true  %> | ||||
| 	</div> | ||||
| </div> | ||||
|  | @ -1,6 +1,16 @@ | |||
| <div id='tags'> | ||||
| <div class="subnav"> | ||||
|     <ul class="nav nav-pills filter"> | ||||
|         <li class="accordion-group"> | ||||
|             <form class="form-search"> | ||||
|                 <input type="text" class="input-medium search-query"> | ||||
|                 <button type="submit" class="btn">Search</button> | ||||
|             </form> | ||||
|         </li> | ||||
|     </ul> | ||||
| </div> | ||||
| <div id='tags' class="clear"> | ||||
| 	<%= render :partial => 'tag', :collection => @tags %> | ||||
| </div> | ||||
| ------------------------- | ||||
| <br/> | ||||
| <%= render 'add' %> | ||||
| <div class="form-actions"> | ||||
| 	<%= render 'add' %> | ||||
| </div> | ||||
|  | @ -1 +1 @@ | |||
| $('#<%= dom_id @tag %>').html("<%= j render :partial => 'tag', :object => @tag %>") | ||||
| $('#<%= dom_id @tag %>').replaceWith("<%= j render :partial => 'tag', :object => @tag %>") | ||||
|  | @ -1,98 +1,99 @@ | |||
| 		<div id="content"> | ||||
| 			<div id="header" class="hh3"> | ||||
| 				<div class="dtitle w2 hh3 hp sdm"> | ||||
| 					<span class="thmtxth">Campus</span> | ||||
| 					<div class="admbg sdm_o"> | ||||
| 						<ul> | ||||
| 							<li><a class="admtxt hp w2 hh2" href="">Research</a></li> | ||||
| 							<li><a class="admtxt hp w2 hh2" href="">Social</a></li> | ||||
| 							<li><a class="admtxt hp w2 hh2" href="">Private</a></li> | ||||
| 						</ul> | ||||
| 					</div> | ||||
| 
 | ||||
| <div id="content"> | ||||
| 	<div id="header" class="hh3"> | ||||
| 		<div class="dtitle w2 hh3 hp sdm"> | ||||
| 			<span class="thmtxth">Campus</span> | ||||
| 			<div class="admbg sdm_o"> | ||||
| 				<ul> | ||||
| 					<li><a class="admtxt hp w2 hh2" href="">Research</a></li> | ||||
| 					<li><a class="admtxt hp w2 hh2" href="">Social</a></li> | ||||
| 					<li><a class="admtxt hp w2 hh2" href="">Private</a></li> | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| 	<div id="holder"> | ||||
| 		<div class="scrollbar op01"><div class="track"><div class="thumb thmc2"><div class="end"></div></div></div></div> | ||||
| 			<div class="viewport"> | ||||
| 	        <div id="group_wrapper" class="overview"> | ||||
| 	        <div class="group"> | ||||
| 	            <ul class="grp ui-sortable"> | ||||
|                 	<li class="element w2 h2 hp vp" data-category="abc"> | ||||
| 	                    <span class="tile thmc1 op07"></span> | ||||
| 	                    <h1 class="appname thmtxt">MyCourseTimeTable</h1> | ||||
| 	                    <div class="appholder">test content</div> | ||||
| 	                </li> | ||||
| 	                <li class="element w1 h1 hp vp" data-category="desktop"> | ||||
| 	                	<span class="tile thmc2 op09"></span> | ||||
| 	                	<a href="" class="appicon"><img src="" alt=""></a> | ||||
| 	                    <h1 class="appname thmtxt">名人名言</h1> | ||||
| 	                </li> | ||||
| 	                <li class="element w2 h2 hp vp" data-category="widget" data-content='weather'> | ||||
| 	                    <span class="tile thmc2 op09"></span> | ||||
| 	                    <h1 class="appname thmtxt">Weather</h1> | ||||
| 	                    <div class="appholder holder_f"> | ||||
| 						</div> | ||||
| 	                </li> | ||||
| 	                <li class="element w2 h1 hp vp" data-category="widget" data-content='clock'> | ||||
| 	                	<span class="tile thmc1 op08"></span> | ||||
| 	                    <h1 class="appname thmtxt">Clock</h1> | ||||
| 	                	<div class="appholder holder_f">test content</div> | ||||
| 	                </li> | ||||
| 	                <li class="element w2 h1 hp vp" data-category="widget" data-content="school_events"> | ||||
| 	                	<span class="tile thmc1 op08"></span> | ||||
| 	                    <h1 class="appname thmtxt">School Events</h1> | ||||
| 	                	<div class="appholder">test content</div> | ||||
| 	                </li> | ||||
| 	                <li class="element w1 h1 hp vp" data-category="desktop"> | ||||
| 	                	<span class="tile thmc2 op09"></span> | ||||
| 	                	<a href="" class="appicon"><img src="" alt=""></a> | ||||
| 	                    <h1 class="appname thmtxt">每日英文</h1> | ||||
| 	                </li> | ||||
| 	          	  </ul> | ||||
| 	            </div> | ||||
| 	       		<div class="group"> | ||||
| 	                <ul class="grp ui-sortable"> | ||||
|                     	<li style="" class="element w2 h2 hp vp thmc2 op07" data-category="abc"> | ||||
| 	                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 	                    </li><li class="element w2 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li> | ||||
| 	                    <li class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li> | ||||
| 	                     <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w2 h1 hp vp thmc1 op07" data-category="abc"> | ||||
| 	                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 	                    </li><li style="" class="element w2 h2 hp vp thmc2 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="abc"> | ||||
| 	                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 	                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 	                    </li> | ||||
| 	                </ul> | ||||
| 	            </div> | ||||
|                 <div class="clear"></div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<div id="holder"> | ||||
| 				<div class="scrollbar"><div class="track"><div class="thumb thmc2"><div class="end"></div></div></div></div> | ||||
| 					<div class="viewport"> | ||||
| 			        <div id="group_wrapper" class="overview"> | ||||
| 			        <div class="group"> | ||||
| 			            <ul class="grp ui-sortable"> | ||||
|                         	<li class="element w2 h2 hp vp" data-category="abc"> | ||||
| 			                    <span class="tile thmc1 op07"></span> | ||||
| 			                    <h1 class="appname thmtxt">MyCourseTimeTable</h1> | ||||
| 			                    <div class="appholder">test content</div> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp" data-category="desktop"> | ||||
| 			                	<span class="tile thmc2 op09"></span> | ||||
| 			                	<a href="" class="appicon"><img src="" alt=""></a> | ||||
| 			                    <h1 class="appname thmtxt">名人名言</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w2 h2 hp vp" data-category="abc"> | ||||
| 			                    <span class="tile thmc2 op09"></span> | ||||
| 			                    <h1 class="appname thmtxt">Weather</h1> | ||||
| 			                    <div class="appholder holder_f">test content</div> | ||||
| 			                </li> | ||||
| 			                <li class="element w2 h1 hp vp" data-category="abc"> | ||||
| 			                	<span class="tile thmc1 op08"></span> | ||||
| 			                    <h1 class="appname thmtxt">Clock</h1> | ||||
| 			                	<div class="appholder holder_f">test content</div> | ||||
| 			                </li> | ||||
| 			                <li class="element w2 h1 hp vp" data-category="abc"> | ||||
| 			                	<span class="tile thmc1 op08"></span> | ||||
| 			                    <h1 class="appname thmtxt">School Events</h1> | ||||
| 			                	<div class="appholder">test content</div> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp" data-category="desktop"> | ||||
| 			                	<span class="tile thmc2 op09"></span> | ||||
| 			                	<a href="" class="appicon"><img src="" alt=""></a> | ||||
| 			                    <h1 class="appname thmtxt">每日英文</h1> | ||||
| 			                </li> | ||||
| 			          	  </ul> | ||||
| 			            </div> | ||||
| 			       		<div class="group"> | ||||
| 			                <ul class="grp ui-sortable"> | ||||
|                             	<li style="" class="element w2 h2 hp vp thmc2 op07" data-category="abc"> | ||||
| 			                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                    </li><li class="element w2 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li> | ||||
| 			                    <li class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li> | ||||
| 			                     <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w2 h1 hp vp thmc1 op07" data-category="abc"> | ||||
| 			                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                    </li><li style="" class="element w2 h2 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="abc"> | ||||
| 			                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li> | ||||
| 			                </ul> | ||||
| 			            </div> | ||||
|                         <div class="clear"></div> | ||||
| 						</div> | ||||
| 					</div> | ||||
| 					</div> | ||||
|                      | ||||
| 			        </div> | ||||
| 			<div class="clear"></div> | ||||
| 			</div> | ||||
|              | ||||
| 	        </div> | ||||
| 	<div class="clear"></div> | ||||
|  |  | |||
|  | @ -65,13 +65,7 @@ | |||
| </div> | ||||
| </div> | ||||
| <!--<div id="orbitbar"></div>--> | ||||
| Change Theme: <select id="change_theme"> | ||||
| <option value='default'>Default Theme</option> | ||||
| <option value='Snake'>Snake Theme</option> | ||||
| <option value='sexy'>Sexy Theme</option> | ||||
| <option value='vintage'>Vintage Theme</option> | ||||
| <option value='chris'>Chris Theme</option> | ||||
| </select> | ||||
| 
 | ||||
| <img src="" id="thmbackground" /> | ||||
| <div id="bgover" ></div> | ||||
| <div id="orbitnote" style="display:none;"> | ||||
|  | @ -80,4 +74,12 @@ Change Theme: <select id="change_theme"> | |||
| 		<div class="note_message">Check the Notifications section for more information.</div> | ||||
| 	</div> | ||||
| </div> | ||||
| <button onClick="od.tempFunc();">Click</button> | ||||
| 
 | ||||
| 
 | ||||
| <script> | ||||
| 	orbitDesktop.prototype.themefolder = "desktop_themes"; | ||||
| 	orbitDesktop.prototype.notifyImgPath = "/assets/"; | ||||
| 	orbitDesktop.prototype.desktopId = "<%= @desktop.id %>"; | ||||
| 	var od = new orbitDesktop("#ajax_container"); | ||||
| 	o.notify("Notification Working!!","imp",5) | ||||
| </script> | ||||
|  |  | |||
|  | @ -16,6 +16,18 @@ | |||
| 					<li><a href="" class="admtxt">Connection</a></li> | ||||
| 				</ul> | ||||
| 				<div class="clear"></div> | ||||
| <<<<<<< HEAD | ||||
| ======= | ||||
| 				<select id="change_theme"> | ||||
| 				<option value='default'>Default Theme</option> | ||||
| 				<option value='snake'>Snake Theme</option> | ||||
| 				<option value='sexy'>Sexy Theme</option> | ||||
| 				<option value='vintage'>Vintage Theme</option> | ||||
| 				<option value='chris'>Chris Theme</option> | ||||
| 				</select> | ||||
| 				<br /> | ||||
| 				<button onClick="od.tempFunc();">Save</button> | ||||
| >>>>>>> desktop_harry | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ | |||
| 			</div> | ||||
| 			<ul class="nav"> | ||||
| 				<li><%= link_to t(:homepage), root_path, :class => 'orbit-bar-home' %></li> | ||||
| 				<li><a class="orbit-bar-desktop" href="#">Desktop</a></li> | ||||
| 			</ul> | ||||
| 			<ul class="nav pull-right"> | ||||
|         <li class="dropdown language"> | ||||
|  | @ -25,6 +26,13 @@ | |||
| 	          <% end %> | ||||
|           </ul> | ||||
|         </li> | ||||
| 
 | ||||
|                 <li class="search clear"> | ||||
|                     <a class="orbit-bar-search" href="#">search</a> | ||||
| 					<form class="navbar-search" action=""> | ||||
| 		        		<input class="search-query span3" type="text" placeholder="<%= t(:search_nccu) %>"> | ||||
| 		      		</form> | ||||
|                 </li> | ||||
| 				<% if user_signed_in? %> | ||||
| 					<li class="dropdown active"> | ||||
| 						<a class="orbit-bar-account" href="#" data-toggle="dropdown"> | ||||
|  | @ -94,9 +102,6 @@ | |||
| 					</li> | ||||
| 				<% end %> | ||||
| 			</ul> | ||||
| 			<form class="navbar-search span6" action=""> | ||||
|           <input class="search-query span4" type="text" placeholder="<%= t(:search_nccu) %>"> | ||||
|       </form> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </header> | ||||
|  | @ -9,7 +9,7 @@ | |||
| 		<%= content_tag :li, link_to(t('admin.add_new'), new_panel_announcement_back_end_bulletin_path), :class => active_for_action('bulletins', 'new') %> | ||||
| 		<%= content_tag :li, link_to(t('admin.categories'), panel_announcement_back_end_bulletin_categorys_path), :class => active_for_action('bulletin_categorys', 'index') %> | ||||
| 		<%= content_tag :li, link_to(t('admin.tags'), panel_announcement_back_end_tags_path), :class => active_for_action('tags', 'index') %> | ||||
| 			<%= content_tag :li, link_to(t('announcement.bulletin.fact_check_setting'), panel_announcement_back_end_fact_checks_setting_path), :class => active_for_action('tags', 'index')  if is_manager? %> | ||||
| 		<%= content_tag :li, link_to(t('announcement.bulletin.fact_check_setting'), panel_announcement_back_end_fact_checks_setting_path), :class => active_for_action('bulletins', 'fact_check_setting')  if (is_manager? rescue nil) %> | ||||
| 	<% end -%> | ||||
| 
 | ||||
| <% end -%> | ||||
|  | @ -29,6 +29,15 @@ | |||
| 	<%= link_to content_tag(:i, nil, :class => 'icons-window-block') + t('admin.design'), admin_designs_path %> | ||||
| <% end -%> | ||||
| 
 | ||||
| <%= content_tag :li, :class => active_for_controllers('ad_banners', 'ad_images') do -%> | ||||
| 	<%= link_to content_tag(:i, nil, :class => 'icons-link') + 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.all_ad_banners'), admin_ad_banners_path), :class => active_for_action('ad_banners', 'index') %> | ||||
| 		<%= content_tag :li, link_to(t('admin.new_ad_banner'), new_admin_ad_banner_path), :class => active_for_action('ad_banners', 'new') %> | ||||
| 		<%= content_tag :li, link_to(t('admin.new_ad_image'), new_ad_image_admin_ad_banners_path), :class => active_for_action('ad_images', 'new') %> | ||||
| 	<% end %> | ||||
| <% end %> | ||||
| 
 | ||||
| <%= content_tag :li, :class => active_for_controllers('web_links', 'tags', 'web_link_categorys') do -%> | ||||
| 	<%= link_to content_tag(:i, nil, :class => 'icons-link') + t('admin.link'), panel_web_resource_back_end_web_links_path %> | ||||
| 	  <%= content_tag :ul, :class => ("nav nav-list " + visible_for_controllers('web_links', 'tags', 'web_link_categorys')) do -%> | ||||
|  |  | |||
|  | @ -31,6 +31,7 @@ module Orbit | |||
|     config.autoload_paths += %W(#{config.root}/lib) | ||||
|     config.autoload_paths += %W(#{config.root}/lib/parsers) | ||||
|     config.autoload_paths += %W(#{config.root}/app/models/design) | ||||
|     config.autoload_paths += %W(#{config.root}/app/models/meta) | ||||
|     config.autoload_paths += %W(#{config.root}/app/models/purchase) | ||||
|     config.autoload_paths += %W(#{config.root}/app/models/user) | ||||
| 
 | ||||
|  |  | |||
|  | @ -39,6 +39,14 @@ zh_tw: | |||
|   admin: | ||||
|     action: 操作 | ||||
|     ad_banner: 廣告輪播 | ||||
|     ad: | ||||
|       ab_fx: 轉場特效 | ||||
|       all_banners: 輪播清單 | ||||
|       new_banner: 新增輪播 | ||||
|       new_image: 新增橫幅 | ||||
|       title: 標題 | ||||
|       transition_sec: 轉場單位時間 | ||||
|       trans_unit_sec: 秒 | ||||
|     add: 新增 | ||||
|     add_item: 新增項目 | ||||
|     add_language: 新增語言 | ||||
|  |  | |||
|  | @ -24,7 +24,14 @@ Orbit::Application.routes.draw do | |||
|       end | ||||
|     end | ||||
| 
 | ||||
|     resources :ad_banners | ||||
|      | ||||
|     resources :ad_banners do  | ||||
|         collection do | ||||
|           match 'new_ad_image' => 'ad_images#new',:as => :new_ad_image,:via => :get | ||||
|           match 'new_ad_image' => 'ad_images#create',:as => :create_ad_image,:via => :post | ||||
|         end | ||||
|         resources :ad_images ,:except => [:show,:index] | ||||
|     end | ||||
|     resources :dashboards | ||||
|     resources :designs do | ||||
|       collection do | ||||
|  | @ -99,6 +106,8 @@ Orbit::Application.routes.draw do | |||
|   match '/desktop/app_manager'=>'desktop#app_manager' | ||||
|   match '/desktop/sections'=>'desktop#sections' | ||||
|   match '/desktop/settings'=>'desktop#settings' | ||||
|   match '/desktop/get_desktop_settings/'=>'desktop#get_desktop_settings' | ||||
|   match '/desktop/save_desktop_settings/'=>'desktop#save_desktop_settings' | ||||
|   match '/panel/:app_name/front_end/:app_action/:id' => 'pages#show_from_link', :constraints => lambda { |request| | ||||
|     !request.query_string.include?("inner=true") | ||||
|   } | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ module ParserBackEnd | |||
|   def parse_page_edit_noko(page, id = nil) | ||||
|     body = Nokogiri::HTML(page.design.layout.body) | ||||
|     parse_menu(body, page, true) | ||||
|     public_r_tags = parse_contents(body, page, id) | ||||
|     public_r_tags = parse_content_edits(body, page, id) | ||||
|     parse_images(body, page) | ||||
| 
 | ||||
|     public_r_tags.each do |tag| | ||||
|  | @ -37,7 +37,7 @@ module ParserBackEnd | |||
|   end | ||||
| 
 | ||||
|   # page_contents | ||||
|   def parse_contents(body, page, id) | ||||
|   def parse_content_edits(body, page, id) | ||||
|     public_r_tags = [] | ||||
|     body.css('.page_content').each do |content| | ||||
|       ret = '' | ||||
|  | @ -47,9 +47,9 @@ module ParserBackEnd | |||
|         ret << "'></div>" | ||||
|       else | ||||
|         part = page.page_parts.detect{ |p| p.name.to_s == content['name'].to_s } rescue nil | ||||
|         ret << "<div id='#{tag.attr['name']}' part_id='#{part.id}' class='editable' style='border:solid 1px; margin:5px; padding:5px;'>" | ||||
|         ret << "<div id='#{content['name']}' part_id='#{part.id}' class='editable' style='border:solid 1px; margin:5px; padding:5px;'>" if part | ||||
|         ret << "<div class='edit_link' style='display:none'>" | ||||
|         ret << " <a href='#{edit_admin_page_part_path(part.id)}' class='nav'>#{t(:edit)}</a>" | ||||
|         ret << " <a href='#{edit_admin_page_part_path(part.id)}' class='nav'>#{t(:edit)}</a>" if part | ||||
|         ret << '</div>' | ||||
|         case part.kind | ||||
|         when 'text' | ||||
|  | @ -65,7 +65,7 @@ module ParserBackEnd | |||
|           public_r_tags << part.public_r_tag | ||||
|         else | ||||
|             '' | ||||
|         end | ||||
|         end if part | ||||
|       end | ||||
|       scope = "<#{content.name}" | ||||
|       content.attributes.each_pair do |key, value| | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ module ParserCommon | |||
|   | ||||
|   def menu_level(page, current, menu, edit = false) | ||||
|     res = '' | ||||
|     if current <= menu.levels | ||||
|     if menu.levels > 0 && current <= menu.levels | ||||
|       if current != 0 | ||||
|         res << "<div class='rc_dm'>" | ||||
|         item = rand(100000) | ||||
|  | @ -49,19 +49,29 @@ module ParserCommon | |||
|     body.css('ad_banner').each do |banner| | ||||
|       res = '' | ||||
|       ad_banner = AdBanner.find(banner["id"]) rescue nil | ||||
|       if ad_banner && ad_banner.display? | ||||
|       if ad_banner | ||||
|         res << "<script type='text/javascript'> | ||||
|                 $(document).ready(function(){ $('#slideshow-#{ad_banner.title.dehumanize}').cycle({delay: -1000, fx: '#{ad_banner.ad_fx.nil?? 'fade': ad_banner.ad_fx}', timeoutFn: getTimeout }); }); | ||||
|                 </script>" | ||||
|         res << "<div id='slideshow-#{ad_banner.title.dehumanize}'>" | ||||
|          ad_banner.ad_images.each do |ad_image| | ||||
|            res << "<img src='#{ad_image.file}' " | ||||
|            res << "alt='#{ad_image.picture_intro || ' '}' " | ||||
|            res << "time_to_next='#{ad_image.get_delay_time}' " | ||||
|            res << "link_open='#{ad_image.link_open}' " | ||||
|            res << "link_url='#{(ad_banner.direct_to_after_click?? ad_image.out_link : ad_banner.context) || ' '}' " | ||||
|            res << "/>" | ||||
|         printable_ad_images = [] | ||||
|         ad_banner.ad_images.each do |ad_image| | ||||
|           if ad_image.display? | ||||
|             ad_image.weight.times do | ||||
|               printable_ad_images << ad_image | ||||
|             end | ||||
|           end | ||||
|         end | ||||
|         printable_ad_images.shuffle! | ||||
|         printable_ad_images.each  do |ad_image|  #TODO Need Reflact | ||||
|           res << "<img src='#{ad_image.file}' " | ||||
|           res << "alt='#{ad_image.title || ' '}' " | ||||
|           res << "time_to_next='#{ad_banner.transition_sec}' " | ||||
|           res << "link_open='#{ad_image.link_open}' " | ||||
|           # res << "link_url='#{(ad_image.direct_to_after_click?? ad_image.out_link : ad_banner.context) || ' '}' " | ||||
|           res << "link_url='#{(ad_image.out_link || ad_banner.context || ' ')}' " | ||||
|           res << "/>"           | ||||
|         end | ||||
|         res << "</div>" | ||||
|       end | ||||
|       fragment = Nokogiri::HTML::DocumentFragment.new(body, res) | ||||
|  | @ -74,7 +84,7 @@ module ParserCommon | |||
|     body.css('.page_image').each do |page_image| | ||||
|       # image = page.custom_images.detect{|image| image.name.eql?(tag.attr['name']) } | ||||
|       # image = page.design.custom_images.detect{|image| image.name.eql?(tag.attr['name']) } unless image | ||||
|       image = page.design.images.detect{|image| image.name.eql?(page_image['name']) } unless image | ||||
|       image = page.design.images.detect{|image| image.name.eql?(File.basename(page_image['src'])) } unless image | ||||
|       if image | ||||
|         res = "<img src=#{image.file.url} " | ||||
|         page_image.attributes.each do |l| | ||||
|  | @ -92,7 +102,7 @@ module ParserCommon | |||
|     page_menu = body.css('.page_menu').first | ||||
|     home = get_homepage | ||||
|     menu = page.design.layout.menu | ||||
|     fragment = Nokogiri::HTML::DocumentFragment.new(body, menu_level(home, 0, menu, true)) | ||||
|     fragment = Nokogiri::HTML::DocumentFragment.new(body, menu_level(home, 0, menu, edit)) | ||||
|     page_menu.swap(fragment) | ||||
|   end | ||||
| 
 | ||||
|  |  | |||
|  | @ -61,7 +61,7 @@ module ParserFrontEnd | |||
|           public_r_tags << part.public_r_tag | ||||
|         else | ||||
|             '' | ||||
|         end | ||||
|         end if part | ||||
|       end | ||||
|       scope = "<#{content.name}" | ||||
|       content.attributes.each_pair do |key, value| | ||||
|  |  | |||
|  | @ -8,11 +8,6 @@ module ParserLayout | |||
|       layout.layout_parts.build(:name => content['name']) | ||||
|     end | ||||
| 
 | ||||
|     body.css('.page_image').each do |image| | ||||
|       image = layout.design.images.detect{ |i| i.file_identifier.eql?(parse_html_image(image.to_html)) } | ||||
|       image.update_attributes(:name => image['name'], :html_id => image['id'], :html_class => image['class']) if image | ||||
|     end | ||||
| 
 | ||||
|     body.css('.page_menu').each do |menu| | ||||
|       layout.build_menu(:levels => 0, :values => {}) unless layout.menu | ||||
|       layout.menu.levels = i = menu['level'].to_i | ||||
|  | @ -22,12 +17,14 @@ module ParserLayout | |||
|      | ||||
|   end | ||||
| 
 | ||||
|   def parse_html_image(html) | ||||
|     html.scan(/(?<=\<img)(.*?)(?=\/\>)/){ | ||||
|       $1.gsub(' ','').scan(/(?<=src=\")(.*?)(?=\")/){ | ||||
|         return File.basename($1).gsub(/[\\\"]/, '') | ||||
|       } | ||||
|     } | ||||
|   def parse_body_for_images(design) | ||||
|     body = Nokogiri::HTML(design.layout.body) | ||||
| 
 | ||||
|     body.css('.page_image').each do |page_image| | ||||
|       image = design.images.where( file: File.basename(page_image['src']))[0] | ||||
|       image.update_attributes(:name => File.basename(page_image['src']), :html_id => page_image['id'], :html_class => page_image['class']) if image | ||||
|     end | ||||
|      | ||||
|   end | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,121 +0,0 @@ | |||
| <div id="content"> | ||||
| 	<div id="header" class="hh3"> | ||||
| 		<div class="dtitle thmtxth w2 hh3 hp">Apps Manager</div> | ||||
| 		<a href="" class="hfn w1 hh2 hp"><span class="tile thmc1 op06"></span><span class="thmtxt">Date</span></a> | ||||
| 		<a href="ascending" class="hfn w1 hh2 hp" id="alphabet_sort_btn" ><span class="tile thmc2 op03"></span><span class="thmtxt">Alphabet [A-Z]</span></a> | ||||
| 		<div id="search_app" class="hfn w2 hh2 hp thmc3"> | ||||
| 			<input type="text" class="ini_input form" value="Search" id="searchbox" /> | ||||
| 			<input type="submit" class="ini_input submit thmc1" value="Submit"/> | ||||
| 		</div> | ||||
| 		<div class="clear"></div> | ||||
| 	</div> | ||||
| 	<div class="search_result"> | ||||
| 				 | ||||
| 			</div> | ||||
| 	<div id="holder"> | ||||
|      | ||||
| 		<div id="group_wrapper"> | ||||
| 			 | ||||
| 			<div class="group g_sep op03" id='seperator' style="height: 516px;display:none;"></div> | ||||
| 			<div class="group_search"> | ||||
| 				<div class="element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
|                 <div class="element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class="element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
|                 <div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">Aperture</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iTunes</h1> | ||||
| 				</div> | ||||
| 				<div class=" element w1 h1 hp vp thmc2" data-category="desktop"> | ||||
| 					<h1 class="appname thmtxt">iWork</h1> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<div class="clear"></div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
|  | @ -1,110 +0,0 @@ | |||
| 		<div id="content"> | ||||
| 			<div id="header" class="hh3"> | ||||
| 				<div class="dtitle w2 hh3 hp"> | ||||
| 					<span class="thmtxth">Desktop</span> | ||||
| 					<div class="section_slc admbg"> | ||||
| 						<ul> | ||||
| 							<li><a class="admtxt" href="">Section 1</a></li> | ||||
| 							<li><a class="admtxt" href="">Section 2</a></li> | ||||
| 							<li><a class="admtxt" href="">Section 3</a></li> | ||||
| 						</ul> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<div id="holder"> | ||||
| 			        <div id="group_wrapper"> | ||||
| 			        <div class="group"> | ||||
| 			            <ul class="grp ui-sortable"> | ||||
|                         	 <li class="element w2 h2 hp vp thmc1 op07" data-category="abc"> | ||||
| 			                    <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                </li> | ||||
|                              <li class="element w2 h2 hp vp thmc2 op07" data-category="abc"> | ||||
| 			                    <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc1 op07" data-category="abc"> | ||||
| 			                    <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w2 h1 hp vp thmc1 op07" data-category="abc"> | ||||
| 			                    <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                    <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                </li> | ||||
| 			                 <li class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="abc"> | ||||
| 			                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                    </li><li style="" class="element w2 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li> | ||||
| 			          	  </ul> | ||||
| 			            </div> | ||||
| 			       		<div class="group"> | ||||
| 			                <ul class="grp ui-sortable"> | ||||
|                             	<li style="" class="element w2 h2 hp vp thmc2 op07" data-category="abc"> | ||||
| 			                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                    </li><li class="element w2 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li> | ||||
| 			                    <li class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li> | ||||
| 			                     <li class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w2 h1 hp vp thmc1 op07" data-category="abc"> | ||||
| 			                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                    </li><li style="" class="element w2 h2 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="abc"> | ||||
| 			                        <h1 class="appname thmtxt">Garage Band</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc2 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li><li style="" class="element w1 h1 hp vp thmc1 op07" data-category="desktop"> | ||||
| 			                        <h1 class="appname thmtxt">Aperture</h1> | ||||
| 			                    </li> | ||||
| 			                </ul> | ||||
| 			            </div> | ||||
|                         <div class="clear"></div> | ||||
| 						</div> | ||||
| 					</div> | ||||
|                      | ||||
| 			        </div> | ||||
| 			<div class="clear"></div> | ||||
| 		 | ||||
|  | @ -1,171 +0,0 @@ | |||
| <div id="content"> | ||||
| 		<div id="header" class="hh3"> | ||||
| 			<div class="dtitle w2 hh3 hp"> | ||||
| 				<span class="thmtxth">All Sections</span> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div id="holder"> | ||||
| 			<div id="group_wrapper"> | ||||
| 				<div class="group"> | ||||
| 					<div class="section_label" > | ||||
| 						<ul> | ||||
| 							<li class="element w1 h1 hp vp thmtxt"><span class="tile thmc1"></span><span class="thmtxt">section 1</span></li> | ||||
| 							<li class="element w1 h1 hp vp thmtxt " style="display: none;" data-category="section2"><span class="tile thmc1 op06"></span><span class="thmtxt">section 2</span></li> | ||||
| 							<li class="element w1 h1 hp vp thmtxt " style="display: none;" data-category="section3"><span class="tile thmc1 op06"></span><span class="thmtxt">section 3</span></li> | ||||
| 							<li class="element w1 h1 hp vp thmtxt " style="display: none;" data-category="section4"><span class="tile thmc1 op06"></span><span class="thmtxt">section 4</span></li> | ||||
| 						</ul> | ||||
| 					</div> | ||||
| 					<ul class="grp" id="section1"> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
|                         <li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
|                         <li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						 | ||||
|                          | ||||
| 					</ul> | ||||
| 				</div> | ||||
| 				<div class="group"> | ||||
| 					<div class="section_label" > | ||||
| 						<ul> | ||||
| 							<li class="element w1 h1 hp vp thmtxt"><span class="tile thmc1"></span><span class="thmtxt">section 2</span></li> | ||||
| 							<li class="element w1 h1 hp vp thmtxt " style="display: none;" data-category="section1"><span class="tile thmc1 op06"></span><span class="thmtxt">section 1</span></li> | ||||
| 							<li class="element w1 h1 hp vp thmtxt " style="display: none;" data-category="section3"><span class="tile thmc1 op06"></span><span class="thmtxt">section 3</span></li> | ||||
| 							<li class="element w1 h1 hp vp thmtxt " style="display: none;" data-category="section4"><span class="tile thmc1 op06"></span><span class="thmtxt">section 4</span></li> | ||||
| 						</ul> | ||||
| 					</div> | ||||
| 					<ul class="grp" id="section2"> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
|                         <li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
|                         <li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						<li class="element w1 hh2 hp vp" data-category="abc"> | ||||
| 							<h1 class="appname thmtxt">Garage Band</h1> | ||||
| 						</li> | ||||
| 						 | ||||
| 					</ul> | ||||
| 				</div> | ||||
| 				<div class="clear"></div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| After Width: | Height: | Size: 535 B | 
| After Width: | Height: | Size: 720 B | 
| After Width: | Height: | Size: 415 B | 
| After Width: | Height: | Size: 553 B | 
| After Width: | Height: | Size: 436 B | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 598 B | 
| After Width: | Height: | Size: 714 B | 
| After Width: | Height: | Size: 524 B | 
| After Width: | Height: | Size: 454 B | 
| After Width: | Height: | Size: 500 B | 
| After Width: | Height: | Size: 513 B | 
| After Width: | Height: | Size: 533 B | 
| After Width: | Height: | Size: 379 B | 
| After Width: | Height: | Size: 488 B | 
| After Width: | Height: | Size: 506 B | 
| After Width: | Height: | Size: 670 B | 
| After Width: | Height: | Size: 517 B | 
| After Width: | Height: | Size: 805 B | 
| After Width: | Height: | Size: 481 B | 
| After Width: | Height: | Size: 464 B | 
| After Width: | Height: | Size: 628 B | 
| After Width: | Height: | Size: 495 B | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 524 B | 
| After Width: | Height: | Size: 575 B | 
| After Width: | Height: | Size: 533 B |