| _pgbackup |
| RewriteRule "^rain\.html$" "rain.php" |
| /* | |||||
| Holder - 2.2 - client side image placeholders | |||||
| (c) 2012-2013 Ivan Malopinsky / http://imsky.co | |||||
| Provided under the MIT License. | |||||
| Commercial use requires attribution. | |||||
| */ | |||||
| var Holder = Holder || {}; | |||||
| (function (app, win) { | |||||
| var preempted = false, | |||||
| fallback = false, | |||||
| canvas = document.createElement('canvas'); | |||||
| var dpr = 1, bsr = 1; | |||||
| var resizable_images = []; | |||||
| if (!canvas.getContext) { | |||||
| fallback = true; | |||||
| } else { | |||||
| if (canvas.toDataURL("image/png") | |||||
| .indexOf("data:image/png") < 0) { | |||||
| //Android doesn't support data URI | |||||
| fallback = true; | |||||
| } else { | |||||
| var ctx = canvas.getContext("2d"); | |||||
| } | |||||
| } | |||||
| if(!fallback){ | |||||
| dpr = window.devicePixelRatio || 1, | |||||
| bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; | |||||
| } | |||||
| var ratio = dpr / bsr; | |||||
| var settings = { | |||||
| domain: "holder.js", | |||||
| images: "img", | |||||
| bgnodes: ".holderjs", | |||||
| themes: { | |||||
| "gray": { | |||||
| background: "#eee", | |||||
| foreground: "#aaa", | |||||
| size: 12 | |||||
| }, | |||||
| "social": { | |||||
| background: "#3a5a97", | |||||
| foreground: "#fff", | |||||
| size: 12 | |||||
| }, | |||||
| "industrial": { | |||||
| background: "#434A52", | |||||
| foreground: "#C2F200", | |||||
| size: 12 | |||||
| }, | |||||
| "sky": { | |||||
| background: "#0D8FDB", | |||||
| foreground: "#fff", | |||||
| size: 12 | |||||
| }, | |||||
| "vine": { | |||||
| background: "#39DBAC", | |||||
| foreground: "#1E292C", | |||||
| size: 12 | |||||
| }, | |||||
| "lava": { | |||||
| background: "#F8591A", | |||||
| foreground: "#1C2846", | |||||
| size: 12 | |||||
| } | |||||
| }, | |||||
| stylesheet: "" | |||||
| }; | |||||
| app.flags = { | |||||
| dimensions: { | |||||
| regex: /^(\d+)x(\d+)$/, | |||||
| output: function (val) { | |||||
| var exec = this.regex.exec(val); | |||||
| return { | |||||
| width: +exec[1], | |||||
| height: +exec[2] | |||||
| } | |||||
| } | |||||
| }, | |||||
| fluid: { | |||||
| regex: /^([0-9%]+)x([0-9%]+)$/, | |||||
| output: function (val) { | |||||
| var exec = this.regex.exec(val); | |||||
| return { | |||||
| width: exec[1], | |||||
| height: exec[2] | |||||
| } | |||||
| } | |||||
| }, | |||||
| colors: { | |||||
| regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i, | |||||
| output: function (val) { | |||||
| var exec = this.regex.exec(val); | |||||
| return { | |||||
| size: settings.themes.gray.size, | |||||
| foreground: "#" + exec[2], | |||||
| background: "#" + exec[1] | |||||
| } | |||||
| } | |||||
| }, | |||||
| text: { | |||||
| regex: /text\:(.*)/, | |||||
| output: function (val) { | |||||
| return this.regex.exec(val)[1]; | |||||
| } | |||||
| }, | |||||
| font: { | |||||
| regex: /font\:(.*)/, | |||||
| output: function (val) { | |||||
| return this.regex.exec(val)[1]; | |||||
| } | |||||
| }, | |||||
| auto: { | |||||
| regex: /^auto$/ | |||||
| }, | |||||
| textmode: { | |||||
| regex: /textmode\:(.*)/, | |||||
| output: function(val){ | |||||
| return this.regex.exec(val)[1]; | |||||
| } | |||||
| } | |||||
| } | |||||
| //getElementsByClassName polyfill | |||||
| document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s}) | |||||
| //getComputedStyle polyfill | |||||
| window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this}) | |||||
| //http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications | |||||
| function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}} | |||||
| //https://gist.github.com/991057 by Jed Schmidt with modifications | |||||
| function selector(a){ | |||||
| a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2]); | |||||
| var ret=[]; b!==null&&(b.length?ret=b:b.length===0?ret=b:ret=[b]); return ret; | |||||
| } | |||||
| //shallow object property extend | |||||
| function extend(a,b){ | |||||
| var c={}; | |||||
| for(var i in a){ | |||||
| if(a.hasOwnProperty(i)){ | |||||
| c[i]=a[i]; | |||||
| } | |||||
| } | |||||
| for(var i in b){ | |||||
| if(b.hasOwnProperty(i)){ | |||||
| c[i]=b[i]; | |||||
| } | |||||
| } | |||||
| return c | |||||
| } | |||||
| //hasOwnProperty polyfill | |||||
| if (!Object.prototype.hasOwnProperty) | |||||
| /*jshint -W001, -W103 */ | |||||
| Object.prototype.hasOwnProperty = function(prop) { | |||||
| var proto = this.__proto__ || this.constructor.prototype; | |||||
| return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]); | |||||
| } | |||||
| /*jshint +W001, +W103 */ | |||||
| function text_size(width, height, template) { | |||||
| height = parseInt(height, 10); | |||||
| width = parseInt(width, 10); | |||||
| var bigSide = Math.max(height, width) | |||||
| var smallSide = Math.min(height, width) | |||||
| var scale = 1 / 12; | |||||
| var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale); | |||||
| return { | |||||
| height: Math.round(Math.max(template.size, newHeight)) | |||||
| } | |||||
| } | |||||
| function draw(args) { | |||||
| var ctx = args.ctx; | |||||
| var dimensions = args.dimensions; | |||||
| var template = args.template; | |||||
| var ratio = args.ratio; | |||||
| var holder = args.holder; | |||||
| var literal = holder.textmode == "literal"; | |||||
| var exact = holder.textmode == "exact"; | |||||
| var ts = text_size(dimensions.width, dimensions.height, template); | |||||
| var text_height = ts.height; | |||||
| var width = dimensions.width * ratio, | |||||
| height = dimensions.height * ratio; | |||||
| var font = template.font ? template.font : "sans-serif"; | |||||
| canvas.width = width; | |||||
| canvas.height = height; | |||||
| ctx.textAlign = "center"; | |||||
| ctx.textBaseline = "middle"; | |||||
| ctx.fillStyle = template.background; | |||||
| ctx.fillRect(0, 0, width, height); | |||||
| ctx.fillStyle = template.foreground; | |||||
| ctx.font = "bold " + text_height + "px " + font; | |||||
| var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); | |||||
| if (literal) { | |||||
| var dimensions = holder.dimensions; | |||||
| text = dimensions.width + "x" + dimensions.height; | |||||
| } | |||||
| else if(exact && holder.exact_dimensions){ | |||||
| var dimensions = holder.exact_dimensions; | |||||
| text = (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); | |||||
| } | |||||
| var text_width = ctx.measureText(text).width; | |||||
| if (text_width / width >= 0.75) { | |||||
| text_height = Math.floor(text_height * 0.75 * (width / text_width)); | |||||
| } | |||||
| //Resetting font size if necessary | |||||
| ctx.font = "bold " + (text_height * ratio) + "px " + font; | |||||
| ctx.fillText(text, (width / 2), (height / 2), width); | |||||
| return canvas.toDataURL("image/png"); | |||||
| } | |||||
| function render(mode, el, holder, src) { | |||||
| var dimensions = holder.dimensions, | |||||
| theme = holder.theme, | |||||
| text = holder.text ? decodeURIComponent(holder.text) : holder.text; | |||||
| var dimensions_caption = dimensions.width + "x" + dimensions.height; | |||||
| theme = (text ? extend(theme, { | |||||
| text: text | |||||
| }) : theme); | |||||
| theme = (holder.font ? extend(theme, { | |||||
| font: holder.font | |||||
| }) : theme); | |||||
| el.setAttribute("data-src", src); | |||||
| holder.theme = theme; | |||||
| el.holder_data = holder; | |||||
| if (mode == "image") { | |||||
| el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); | |||||
| if (fallback || !holder.auto) { | |||||
| el.style.width = dimensions.width + "px"; | |||||
| el.style.height = dimensions.height + "px"; | |||||
| } | |||||
| if (fallback) { | |||||
| el.style.backgroundColor = theme.background; | |||||
| } else { | |||||
| el.setAttribute("src", draw({ctx: ctx, dimensions: dimensions, template: theme, ratio:ratio, holder: holder})); | |||||
| if(holder.textmode && holder.textmode == "exact"){ | |||||
| resizable_images.push(el); | |||||
| resizable_update(el); | |||||
| } | |||||
| } | |||||
| } else if (mode == "background") { | |||||
| if (!fallback) { | |||||
| el.style.backgroundImage = "url(" + draw({ctx:ctx, dimensions: dimensions, template: theme, ratio: ratio, holder: holder}) + ")"; | |||||
| el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px"; | |||||
| } | |||||
| } else if (mode == "fluid") { | |||||
| el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); | |||||
| if (dimensions.height.slice(-1) == "%") { | |||||
| el.style.height = dimensions.height | |||||
| } else { | |||||
| el.style.height = dimensions.height + "px" | |||||
| } | |||||
| if (dimensions.width.slice(-1) == "%") { | |||||
| el.style.width = dimensions.width | |||||
| } else { | |||||
| el.style.width = dimensions.width + "px" | |||||
| } | |||||
| if (el.style.display == "inline" || el.style.display === "" || el.style.display == "none") { | |||||
| el.style.display = "block"; | |||||
| } | |||||
| if (fallback) { | |||||
| el.style.backgroundColor = theme.background; | |||||
| } else { | |||||
| resizable_images.push(el); | |||||
| resizable_update(el); | |||||
| } | |||||
| } | |||||
| } | |||||
| function dimension_check(el, callback) { | |||||
| var dimensions = { | |||||
| height: el.clientHeight, | |||||
| width: el.clientWidth | |||||
| }; | |||||
| if (!dimensions.height && !dimensions.width) { | |||||
| if (el.hasAttribute("data-holder-invisible")) { | |||||
| throw new Error("Holder: placeholder is not visible"); | |||||
| } else { | |||||
| el.setAttribute("data-holder-invisible", true) | |||||
| setTimeout(function () { | |||||
| callback.call(this, el) | |||||
| }, 1) | |||||
| return null; | |||||
| } | |||||
| } else { | |||||
| el.removeAttribute("data-holder-invisible") | |||||
| } | |||||
| return dimensions; | |||||
| } | |||||
| function resizable_update(element) { | |||||
| var images; | |||||
| if (element.nodeType == null) { | |||||
| images = resizable_images; | |||||
| } else { | |||||
| images = [element] | |||||
| } | |||||
| for (var i in images) { | |||||
| if (!images.hasOwnProperty(i)) { | |||||
| continue; | |||||
| } | |||||
| var el = images[i] | |||||
| if (el.holder_data) { | |||||
| var holder = el.holder_data; | |||||
| var dimensions = dimension_check(el, resizable_update) | |||||
| if(dimensions){ | |||||
| if(holder.fluid){ | |||||
| el.setAttribute("src", draw({ | |||||
| ctx: ctx, | |||||
| dimensions: dimensions, | |||||
| template: holder.theme, | |||||
| ratio: ratio, | |||||
| holder: holder | |||||
| })) | |||||
| } | |||||
| if(holder.textmode && holder.textmode == "exact"){ | |||||
| holder.exact_dimensions = dimensions; | |||||
| el.setAttribute("src", draw({ | |||||
| ctx: ctx, | |||||
| dimensions: holder.dimensions, | |||||
| template: holder.theme, | |||||
| ratio: ratio, | |||||
| holder: holder | |||||
| })) | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| function parse_flags(flags, options) { | |||||
| var ret = { | |||||
| theme: extend(settings.themes.gray, {}) | |||||
| }; | |||||
| var render = false; | |||||
| for (sl = flags.length, j = 0; j < sl; j++) { | |||||
| var flag = flags[j]; | |||||
| if (app.flags.dimensions.match(flag)) { | |||||
| render = true; | |||||
| ret.dimensions = app.flags.dimensions.output(flag); | |||||
| } else if (app.flags.fluid.match(flag)) { | |||||
| render = true; | |||||
| ret.dimensions = app.flags.fluid.output(flag); | |||||
| ret.fluid = true; | |||||
| } else if (app.flags.textmode.match(flag)) { | |||||
| ret.textmode = app.flags.textmode.output(flag) | |||||
| } else if (app.flags.colors.match(flag)) { | |||||
| ret.theme = app.flags.colors.output(flag); | |||||
| } else if (options.themes[flag]) { | |||||
| //If a theme is specified, it will override custom colors | |||||
| if(options.themes.hasOwnProperty(flag)){ | |||||
| ret.theme = extend(options.themes[flag], {}); | |||||
| } | |||||
| } else if (app.flags.font.match(flag)) { | |||||
| ret.font = app.flags.font.output(flag); | |||||
| } else if (app.flags.auto.match(flag)) { | |||||
| ret.auto = true; | |||||
| } else if (app.flags.text.match(flag)) { | |||||
| ret.text = app.flags.text.output(flag); | |||||
| } | |||||
| } | |||||
| return render ? ret : false; | |||||
| } | |||||
| for (var flag in app.flags) { | |||||
| if (!app.flags.hasOwnProperty(flag)) continue; | |||||
| app.flags[flag].match = function (val) { | |||||
| return val.match(this.regex) | |||||
| } | |||||
| } | |||||
| app.add_theme = function (name, theme) { | |||||
| name != null && theme != null && (settings.themes[name] = theme); | |||||
| return app; | |||||
| }; | |||||
| app.add_image = function (src, el) { | |||||
| var node = selector(el); | |||||
| if (node.length) { | |||||
| for (var i = 0, l = node.length; i < l; i++) { | |||||
| var img = document.createElement("img") | |||||
| img.setAttribute("data-src", src); | |||||
| node[i].appendChild(img); | |||||
| } | |||||
| } | |||||
| return app; | |||||
| }; | |||||
| app.run = function (o) { | |||||
| preempted = true; | |||||
| var options = extend(settings, o), | |||||
| images = [], | |||||
| imageNodes = [], | |||||
| bgnodes = []; | |||||
| if (typeof (options.images) == "string") { | |||||
| imageNodes = selector(options.images); | |||||
| } else if (window.NodeList && options.images instanceof window.NodeList) { | |||||
| imageNodes = options.images; | |||||
| } else if (window.Node && options.images instanceof window.Node) { | |||||
| imageNodes = [options.images]; | |||||
| } | |||||
| if (typeof (options.bgnodes) == "string") { | |||||
| bgnodes = selector(options.bgnodes); | |||||
| } else if (window.NodeList && options.elements instanceof window.NodeList) { | |||||
| bgnodes = options.bgnodes; | |||||
| } else if (window.Node && options.bgnodes instanceof window.Node) { | |||||
| bgnodes = [options.bgnodes]; | |||||
| } | |||||
| for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); | |||||
| var holdercss = document.getElementById("holderjs-style"); | |||||
| if (!holdercss) { | |||||
| holdercss = document.createElement("style"); | |||||
| holdercss.setAttribute("id", "holderjs-style"); | |||||
| holdercss.type = "text/css"; | |||||
| document.getElementsByTagName("head")[0].appendChild(holdercss); | |||||
| } | |||||
| if (!options.nocss) { | |||||
| if (holdercss.styleSheet) { | |||||
| holdercss.styleSheet.cssText += options.stylesheet; | |||||
| } else { | |||||
| holdercss.appendChild(document.createTextNode(options.stylesheet)); | |||||
| } | |||||
| } | |||||
| var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); | |||||
| for (var l = bgnodes.length, i = 0; i < l; i++) { | |||||
| var src = window.getComputedStyle(bgnodes[i], null) | |||||
| .getPropertyValue("background-image"); | |||||
| var flags = src.match(cssregex); | |||||
| var bgsrc = bgnodes[i].getAttribute("data-background-src"); | |||||
| if (flags) { | |||||
| var holder = parse_flags(flags[1].split("/"), options); | |||||
| if (holder) { | |||||
| render("background", bgnodes[i], holder, src); | |||||
| } | |||||
| } else if (bgsrc != null) { | |||||
| var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1) | |||||
| .split("/"), options); | |||||
| if (holder) { | |||||
| render("background", bgnodes[i], holder, src); | |||||
| } | |||||
| } | |||||
| } | |||||
| for (l = images.length, i = 0; i < l; i++) { | |||||
| var attr_data_src, attr_src; | |||||
| attr_src = attr_data_src = src = null; | |||||
| try { | |||||
| attr_src = images[i].getAttribute("src"); | |||||
| attr_datasrc = images[i].getAttribute("data-src"); | |||||
| } catch (e) {} | |||||
| if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) { | |||||
| src = attr_src; | |||||
| } else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) { | |||||
| src = attr_datasrc; | |||||
| } | |||||
| if (src) { | |||||
| var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1) | |||||
| .split("/"), options); | |||||
| if (holder) { | |||||
| if (holder.fluid) { | |||||
| render("fluid", images[i], holder, src) | |||||
| } else { | |||||
| render("image", images[i], holder, src); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| return app; | |||||
| }; | |||||
| contentLoaded(win, function () { | |||||
| if (window.addEventListener) { | |||||
| window.addEventListener("resize", resizable_update, false); | |||||
| window.addEventListener("orientationchange", resizable_update, false); | |||||
| } else { | |||||
| window.attachEvent("onresize", resizable_update) | |||||
| } | |||||
| preempted || app.run(); | |||||
| }); | |||||
| if (typeof define === "function" && define.amd) { | |||||
| define([], function () { | |||||
| return app; | |||||
| }); | |||||
| } | |||||
| })(Holder, window); |
| // NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT | |||||
| // IT'S JUST JUNK FOR OUR DOCS! | |||||
| // ++++++++++++++++++++++++++++++++++++++++++ | |||||
| /*! | |||||
| * Copyright 2014-2015 Twitter, Inc. | |||||
| * | |||||
| * Licensed under the Creative Commons Attribution 3.0 Unported License. For | |||||
| * details, see https://creativecommons.org/licenses/by/3.0/. | |||||
| */ | |||||
| // Intended to prevent false-positive bug reports about Bootstrap not working properly in old versions of IE due to folks testing using IE's unreliable emulation modes. | |||||
| (function () { | |||||
| 'use strict'; | |||||
| function emulatedIEMajorVersion() { | |||||
| var groups = /MSIE ([0-9.]+)/.exec(window.navigator.userAgent) | |||||
| if (groups === null) { | |||||
| return null | |||||
| } | |||||
| var ieVersionNum = parseInt(groups[1], 10) | |||||
| var ieMajorVersion = Math.floor(ieVersionNum) | |||||
| return ieMajorVersion | |||||
| } | |||||
| function actualNonEmulatedIEMajorVersion() { | |||||
| // Detects the actual version of IE in use, even if it's in an older-IE emulation mode. | |||||
| // IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx | |||||
| // @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx | |||||
| var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // jshint ignore:line | |||||
| if (jscriptVersion === undefined) { | |||||
| return 11 // IE11+ not in emulation mode | |||||
| } | |||||
| if (jscriptVersion < 9) { | |||||
| return 8 // IE8 (or lower; haven't tested on IE<8) | |||||
| } | |||||
| return jscriptVersion // IE9 or IE10 in any mode, or IE11 in non-IE11 mode | |||||
| } | |||||
| var ua = window.navigator.userAgent | |||||
| if (ua.indexOf('Opera') > -1 || ua.indexOf('Presto') > -1) { | |||||
| return // Opera, which might pretend to be IE | |||||
| } | |||||
| var emulated = emulatedIEMajorVersion() | |||||
| if (emulated === null) { | |||||
| return // Not IE | |||||
| } | |||||
| var nonEmulated = actualNonEmulatedIEMajorVersion() | |||||
| if (emulated !== nonEmulated) { | |||||
| window.alert('WARNING: You appear to be using IE' + nonEmulated + ' in IE' + emulated + ' emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON\'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!') | |||||
| } | |||||
| })(); |
| /*! | |||||
| * IE10 viewport hack for Surface/desktop Windows 8 bug | |||||
| * Copyright 2014-2015 Twitter, Inc. | |||||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |||||
| */ | |||||
| // See the Getting Started docs for more information: | |||||
| // http://getbootstrap.com/getting-started/#support-ie10-width | |||||
| (function () { | |||||
| 'use strict'; | |||||
| if (navigator.userAgent.match(/IEMobile\/10\.0/)) { | |||||
| var msViewportStyle = document.createElement('style') | |||||
| msViewportStyle.appendChild( | |||||
| document.createTextNode( | |||||
| '@-ms-viewport{width:auto!important}' | |||||
| ) | |||||
| ) | |||||
| document.querySelector('head').appendChild(msViewportStyle) | |||||
| } | |||||
| })(); |
| #!/bin/bash | |||||
| rsync -avhp --exclude '_pgbackup' --exclude 'deploy.sh' ./ hk-01@hk-01.biukop.com:~/public_html/ | |||||
| ssh hk-01@hk-01.biukop.com 'chmod og+r -R ~/public_html && find ~/ -type d -exec chmod a+x {} \; ' |
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||||
| <meta name="description" content=""> | |||||
| <meta name="author" content=""> | |||||
| <title>HK-01 Your IP</title> | |||||
| <link href="css/style.css" rel="stylesheet"> | |||||
| </head> | |||||
| <body> | |||||
| <style>body { text-align: center; padding: 150px; } h1 { font-size: 100px; } body { font: 20px Helvetica, sans-serif; color: #333; } article { display: block; text-align: left; width: 650px; margin: 0 auto; } article > div { text-align: center; } a { color: #dc8100; text-decoration: none; } a:hover { color: #333; text-decoration: none; }</style> | |||||
| <?php | |||||
| function get_client_ip() { | |||||
| $ipaddress = ''; | |||||
| if (getenv('HTTP_CLIENT_IP')) | |||||
| $ipaddress = getenv('HTTP_CLIENT_IP'); | |||||
| else if(getenv('HTTP_X_FORWARDED_FOR')) | |||||
| $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); | |||||
| else if(getenv('HTTP_X_FORWARDED')) | |||||
| $ipaddress = getenv('HTTP_X_FORWARDED'); | |||||
| else if(getenv('HTTP_FORWARDED_FOR')) | |||||
| $ipaddress = getenv('HTTP_FORWARDED_FOR'); | |||||
| else if(getenv('HTTP_FORWARDED')) | |||||
| $ipaddress = getenv('HTTP_FORWARDED'); | |||||
| else if(getenv('REMOTE_ADDR')) | |||||
| $ipaddress = getenv('REMOTE_ADDR'); | |||||
| else | |||||
| $ipaddress = 'UNKNOWN'; | |||||
| return $ipaddress; | |||||
| } | |||||
| ?> | |||||
| <article> | |||||
| <h1> <?php echo get_client_ip() ?></h1> | |||||
| <div> | |||||
| <?php echo date("Y-m-d H:i:s") ?> | |||||
| </div> | |||||
| </article> | |||||
| </body> | |||||
| </html> |
| /* Move down content because we have a fixed navbar that is 3.5rem tall */ | |||||
| body { | |||||
| padding-top: 3.5rem; | |||||
| } |
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||||
| <meta name="description" content=""> | |||||
| <meta name="author" content=""> | |||||
| <title>Jumbotron Template for Bootstrap</title> | |||||
| <!-- Bootstrap core CSS --> | |||||
| <link href="bootstrap/css/bootstrap.css" rel="stylesheet"> | |||||
| <!-- Custom styles for this template --> | |||||
| <link href="jumbotron.css" rel="stylesheet"> | |||||
| </head> | |||||
| <body> | |||||
| <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark"> | |||||
| <a class="navbar-brand" href="#">Navbar</a> | |||||
| <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> | |||||
| <span class="navbar-toggler-icon"></span> | |||||
| </button> | |||||
| <div class="collapse navbar-collapse" id="navbarsExampleDefault"> | |||||
| <ul class="navbar-nav mr-auto"> | |||||
| <li class="nav-item active"> | |||||
| <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> | |||||
| </li> | |||||
| <li class="nav-item"> | |||||
| <a class="nav-link" href="#">Link</a> | |||||
| </li> | |||||
| <li class="nav-item"> | |||||
| <a class="nav-link disabled" href="#">Disabled</a> | |||||
| </li> | |||||
| <li class="nav-item dropdown"> | |||||
| <a class="nav-link dropdown-toggle" href="http://example.com" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a> | |||||
| <div class="dropdown-menu" aria-labelledby="dropdown01"> | |||||
| <a class="dropdown-item" href="#">Action</a> | |||||
| <a class="dropdown-item" href="#">Another action</a> | |||||
| <a class="dropdown-item" href="#">Something else here</a> | |||||
| </div> | |||||
| </li> | |||||
| </ul> | |||||
| <form class="form-inline my-2 my-lg-0"> | |||||
| <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search"> | |||||
| <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> | |||||
| </form> | |||||
| </div> | |||||
| </nav> | |||||
| <!-- Main jumbotron for a primary marketing message or call to action --> | |||||
| <div class="jumbotron"> | |||||
| <div class="container"> | |||||
| <h1 class="display-3">Hello, world!</h1> | |||||
| <p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.</p> | |||||
| <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more »</a></p> | |||||
| </div> | |||||
| </div> | |||||
| <div class="container"> | |||||
| <!-- Example row of columns --> | |||||
| <div class="row"> | |||||
| <div class="col-md-4"> | |||||
| <h2>Heading</h2> | |||||
| <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> | |||||
| <p><a class="btn btn-secondary" href="#" role="button">View details »</a></p> | |||||
| </div> | |||||
| <div class="col-md-4"> | |||||
| <h2>Heading</h2> | |||||
| <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> | |||||
| <p><a class="btn btn-secondary" href="#" role="button">View details »</a></p> | |||||
| </div> | |||||
| <div class="col-md-4"> | |||||
| <h2>Heading</h2> | |||||
| <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> | |||||
| <p><a class="btn btn-secondary" href="#" role="button">View details »</a></p> | |||||
| </div> | |||||
| </div> | |||||
| <div class="row"> | |||||
| <div class="col-md-4"> | |||||
| <h2>Heading</h2> | |||||
| <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> | |||||
| <p><a class="btn btn-secondary" href="#" role="button">View details »</a></p> | |||||
| </div> | |||||
| <div class="col-md-4"> | |||||
| <h2>Heading</h2> | |||||
| <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> | |||||
| <p><a class="btn btn-secondary" href="#" role="button">View details »</a></p> | |||||
| </div> | |||||
| <div class="col-md-4"> | |||||
| <h2>Heading</h2> | |||||
| <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> | |||||
| <p><a class="btn btn-secondary" href="#" role="button">View details »</a></p> | |||||
| </div> | |||||
| </div> | |||||
| <hr> | |||||
| <footer> | |||||
| <p>© Company 2017</p> | |||||
| </footer> | |||||
| </div> | |||||
| <!-- /container --> | |||||
| <!-- Bootstrap core JavaScript | |||||
| ================================================== --> | |||||
| <!-- Placed at the end of the document so the pages load faster --> | |||||
| <script src="assets/js/jquery.min.js"></script> | |||||
| <script src="assets/js/popper.js"></script> | |||||
| <script src="bootstrap/js/bootstrap.min.js"></script> | |||||
| </body> | |||||
| </html> |
| {"files":{"jumbotron.html":{"frameworks":["pg.insight.events","pg.css.grid","pg.image.overlay","pg.code-validator","pg.project.items","pg.asset.manager","bs4","pg.html","pg.components"],"last_page_width":1024},"index.php":{"frameworks":["hk-01","pg.project.items","pg.css.grid","pg.asset.manager","pg.insight.events","pg.image.overlay","pg.code-validator","pg.php","bs4","pg.html","pg.components"],"last_page_width":1024},"rain.html":{"frameworks":["hk-01","pg.insight.events","pg.asset.manager","pg.css.grid","pg.project.items","pg.image.overlay","pg.code-validator","pg.html","pg.components"],"last_page_width":1024},"rain.php":{"frameworks":["hk-01","pg.insight.events","pg.asset.manager","pg.css.grid","pg.image.overlay","pg.project.items","pg.php","pg.code-validator","bs4","pg.html","pg.components"],"last_page_width":1024}},"breakpoints":["576px","768px","992px","1200px"],"frameworks":["hk-01","pg.insight.events","pg.asset.manager","pg.css.grid","pg.project.items","pg.image.overlay","pg.code-validator","pg.html","pg.components"],"template_framework_id":"bootstrap"} |
| .container { | |||||
| max-width: 1080px; | |||||
| } | |||||
| /* * Custom translucent site header */ | |||||
| .site-header { | |||||
| background-color: rgba(0, 0, 0, .85); | |||||
| -webkit-backdrop-filter: saturate(180%) blur(20px); | |||||
| backdrop-filter: saturate(180%) blur(20px); | |||||
| } | |||||
| .site-header a { | |||||
| color: #999; | |||||
| transition: ease-in-out color .15s; | |||||
| } | |||||
| .site-header a:hover { | |||||
| color: #fff; | |||||
| text-decoration: none; | |||||
| } | |||||
| /* * Dummy devices (replace them with your own or something else entirely!) */ | |||||
| .product-device { | |||||
| position: absolute; | |||||
| right: 10%; | |||||
| bottom: -30%; | |||||
| width: 300px; | |||||
| height: 540px; | |||||
| background-color: #333; | |||||
| border-radius: 21px; | |||||
| -webkit-transform: rotate(30deg); | |||||
| transform: rotate(30deg); | |||||
| } | |||||
| .product-device::before { | |||||
| position: absolute; | |||||
| top: 10%; | |||||
| right: 10px; | |||||
| bottom: 10%; | |||||
| left: 10px; | |||||
| content: ""; | |||||
| background-color: rgba(255, 255, 255, .1); | |||||
| border-radius: 5px; | |||||
| } | |||||
| .product-device-2 { | |||||
| top: -25%; | |||||
| right: auto; | |||||
| bottom: 0; | |||||
| left: 5%; | |||||
| background-color: #e5e5e5; | |||||
| } | |||||
| /* * Extra utilities */ | |||||
| .border-top { | |||||
| border-top: 1px solid #e5e5e5; | |||||
| } | |||||
| .border-bottom { | |||||
| border-bottom: 1px solid #e5e5e5; | |||||
| } | |||||
| .box-shadow { | |||||
| box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); | |||||
| } | |||||
| .flex-equal > * { | |||||
| -ms-flex: 1; | |||||
| -webkit-box-flex: 1; | |||||
| flex: 1; | |||||
| } | |||||
| @media (min-width: 768px) { | |||||
| .flex-md-equal > * { | |||||
| -ms-flex: 1; | |||||
| -webkit-box-flex: 1; | |||||
| flex: 1; | |||||
| } | |||||
| } | |||||
| .overflow-hidden { | |||||
| overflow: hidden; | |||||
| } |
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||||
| <meta name="description" content=""> | |||||
| <meta name="author" content=""> | |||||
| <meta http-equiv="refresh" content="2;URL='https://hk-01.biukop.com/rain.php'"/> | |||||
| <title>Rain</title> | |||||
| <link href="css/style.css" rel="stylesheet"> | |||||
| </head> | |||||
| <style>body { text-align: center; padding: 150px; } h1 { font-size: 50px; } body { font: 20px Helvetica, sans-serif; color: #333; } article { display: block; text-align: left; width: 650px; margin: 0 auto; } a { color: #dc8100; text-decoration: none; } a:hover { color: #333; text-decoration: none; }</style> | |||||
| <article> | |||||
| <h1>Wecome to RealWorld</h1> | |||||
| <div> | |||||
| <ol> | |||||
| <li> | |||||
| <a href="http://www.creaders.net">万维读者 creaders.net</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://cn.nytimes.com">纽约时报 cn.nytimes.com</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://youtube.com">油管 youtube.com</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="http://wenxuecity.com">文学城 wenxuecity.com</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://wired.com">连线 wired.com</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://backchina.com">倍可亲 backchina.com</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://afr.com">Financial Review afr.com</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://www.ftchinese.com/">FT 中文网 ftchinse.com</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://www.youtube.com/channel/UChRE0pMeij_O5FqWrSKBF-Q">书斋夜话 - 视频</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://www.youtube.com/channel/UCn9_KbNANeyYREePe8YA2DA">财经冷眼 - 视频</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://facebook.com">脸书 - 社交网站</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://twitter.com">推特 - 社交网站 新浪微博来自这里</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://zaobao.com.sg">新加坡联合早报</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://reddit.com">Reddit 英文社交网站论坛,各种话题</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://news.google.com/">谷歌</a> | |||||
| </li> | |||||
| <li> | |||||
| <a href="https://www.itnews.com.au/">IT News</a> | |||||
| </li> | |||||
| </ol> | |||||
| </div> | |||||
| </article> | |||||
| </html> |
| <!doctype html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |||||
| <meta name="description" content=""> | |||||
| <meta name="author" content=""> | |||||
| <title>Rain</title> | |||||
| <!-- Bootstrap core CSS --> | |||||
| <link href="bootstrap/css/bootstrap.css" rel="stylesheet"> | |||||
| <!-- Custom styles for this template --> | |||||
| <link href="product.css" rel="stylesheet"> | |||||
| </head> | |||||
| <body> | |||||
| <?php | |||||
| function get_client_ip() { | |||||
| $ipaddress = ''; | |||||
| if (getenv('HTTP_CLIENT_IP')) | |||||
| $ipaddress = getenv('HTTP_CLIENT_IP'); | |||||
| else if(getenv('HTTP_X_FORWARDED_FOR')) | |||||
| $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); | |||||
| else if(getenv('HTTP_X_FORWARDED')) | |||||
| $ipaddress = getenv('HTTP_X_FORWARDED'); | |||||
| else if(getenv('HTTP_FORWARDED_FOR')) | |||||
| $ipaddress = getenv('HTTP_FORWARDED_FOR'); | |||||
| else if(getenv('HTTP_FORWARDED')) | |||||
| $ipaddress = getenv('HTTP_FORWARDED'); | |||||
| else if(getenv('REMOTE_ADDR')) | |||||
| $ipaddress = getenv('REMOTE_ADDR'); | |||||
| else | |||||
| $ipaddress = 'UNKNOWN'; | |||||
| return $ipaddress; | |||||
| } | |||||
| ?> | |||||
| <nav class="site-header sticky-top py-1"> | |||||
| <div class="container d-flex flex-column flex-md-row justify-content-between"> | |||||
| <a class="py-2" href="#"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="d-block mx-auto"> | |||||
| <circle cx="12" cy="12" r="10"></circle> | |||||
| <line x1="14.31" y1="8" x2="20.05" y2="17.94"></line> | |||||
| <line x1="9.69" y1="8" x2="21.17" y2="8"></line> | |||||
| <line x1="7.38" y1="12" x2="13.12" y2="2.06"></line> | |||||
| <line x1="9.69" y1="16" x2="3.95" y2="6.06"></line> | |||||
| <line x1="14.31" y1="16" x2="2.83" y2="16"></line> | |||||
| <line x1="16.62" y1="12" x2="10.88" y2="21.94"></line> | |||||
| </svg> </a> | |||||
| <a class="py-2 d-none d-md-inline-block" href="https://99cn.info/">海外网址导航</a> | |||||
| <a class="py-2 d-none d-md-inline-block" href="http://www.cwrank.com/main/rank.php?geo=overseas&page=1">中文站点排行榜</a> | |||||
| <a class="py-2 d-none d-md-inline-block" href="https://www.google.com/?hl=zh_CN">谷歌中文</a> | |||||
| <a class="py-2 d-none d-md-inline-block" href="https://www.goodreads.com/genres/google-read">Google Read</a> | |||||
| <a class="py-2 d-none d-md-inline-block" href="https://wired.com/">Wired Magazine</a> | |||||
| <a class="py-2 d-none d-md-inline-block" href="https://www.itnews.com.au/">IT News</a> | |||||
| <a class="py-2 d-none d-md-inline-block" href="https://www.smh.com.au/">Sydney Morning Herald</a> | |||||
| </div> | |||||
| </nav> | |||||
| <div class="position-relative overflow-hidden p-3 p-md-5 m-md-3 text-center bg-light"> | |||||
| <div class="col-md-5 mx-auto my-5 p-lg-5"> | |||||
| <h1 class="display-4 font-weight-normal">Welcome to Rain's World </h1> | |||||
| <p class="font-weight-normal lead">While motivation gets us started, good habits keep us going forward</p> | |||||
| <button class="btn btn-outline-secondary" href="#"> | |||||
| Your IP: | |||||
| <?php echo get_client_ip() ; ?> | |||||
| </button> | |||||
| <br/> | |||||
| <p class="font-weight-normal lead"><?php | |||||
| echo "Today is " . date("Y/m/d - h:i:s") . " @ Asia/HongKong"; | |||||
| ?></p> | |||||
| </div> | |||||
| <div class="box-shadow d-md-block d-none product-device"></div> | |||||
| <div class="box-shadow d-md-block d-none product-device product-device-2"></div> | |||||
| </div> | |||||
| <footer class="container py-5"> | |||||
| <div class="row"> | |||||
| <div class="col-12 col-md"> | |||||
| <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="d-block mb-2"> | |||||
| <circle cx="12" cy="12" r="10"></circle> | |||||
| <line x1="14.31" y1="8" x2="20.05" y2="17.94"></line> | |||||
| <line x1="9.69" y1="8" x2="21.17" y2="8"></line> | |||||
| <line x1="7.38" y1="12" x2="13.12" y2="2.06"></line> | |||||
| <line x1="9.69" y1="16" x2="3.95" y2="6.06"></line> | |||||
| <line x1="14.31" y1="16" x2="2.83" y2="16"></line> | |||||
| <line x1="16.62" y1="12" x2="10.88" y2="21.94"></line> | |||||
| </svg> | |||||
| <small class="d-block mb-3 text-muted">© 20<span style="font-size: 12.8px;">20</span></small> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>海外华闻</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="http://creaders.net/">万维读者 - 加拿大</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://backchina.com/">倍可亲 - 北美</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.wenxuecity.com/">文学城 - 北美</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.6park.com/">留圆网 - 澳州英国</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.nownews.com/">今日新闻 - 台湾</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://hk.appledaily.com/">苹果日报-香港</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://zaobao.com.sg">联合早报 - 新加坡</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.worldjournal.com/">世界日报 - 全美</a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>论坛/社交</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="https://facebook.com">Facebook 脸书</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://twitter.com/">Twitter 推特</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://youtube.com/">Youtube 油管</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.instagram.com/">Instagram</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.reddit.com/">Reddit</a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>软件开发</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="https://github.com/">Github</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.atlassian.com/">Atlassian</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://sourceforge.net/">SourceForge</a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>视频</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.youtube.com/channel/UCn9_KbNANeyYREePe8YA2DA">财经冷眼</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.youtube.com/channel/UCtAIPjABiQD3qjlEl1T5VpA">文昭弹古论今</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.youtube.com/channel/UCBtIsU8tuFzE0U8spSUUbZw">文明客厅 - 周孝正</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.youtube.com/channel/UChRE0pMeij_O5FqWrSKBF-Q">书斋夜话</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.youtube.com/channel/UCBuHkb1AS_yRQ71meFNQ3VQ">年代向钱看-台湾</a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| </div> | |||||
| <div class="row"> | |||||
| <div class="col-12 col-md"> | |||||
| <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="d-block mb-2"> | |||||
| <circle cx="12" cy="12" r="10"></circle> | |||||
| <line x1="14.31" y1="8" x2="20.05" y2="17.94"></line> | |||||
| <line x1="9.69" y1="8" x2="21.17" y2="8"></line> | |||||
| <line x1="7.38" y1="12" x2="13.12" y2="2.06"></line> | |||||
| <line x1="9.69" y1="16" x2="3.95" y2="6.06"></line> | |||||
| <line x1="14.31" y1="16" x2="2.83" y2="16"></line> | |||||
| <line x1="16.62" y1="12" x2="10.88" y2="21.94"></line> | |||||
| </svg> | |||||
| <small class="d-block mb-3 text-muted">外文</small> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>综合</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="http://cn.nytimes.com/">纽约时报 - 中文版</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.washingtonpost.com/">Washington Post - 华盛顿邮报</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.straitstimes.com/global">The Straits Times - 海峡时报</a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>English News</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="https://nytimes.com/">New York Times</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://cnn.com/">CNN</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.bbc.com/news">BBC </a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.reuters.com/">Reuters 路透社</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.smh.com.au/">Sydney Morning Herald 悉尼先锋晨报</a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>Magazine</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="https://time.com/">Times 时代杂志</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.forbes.com/">Forbes 福布斯</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://wired.com/">Wired 连线杂志</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.economist.com/">The Economist 经济学人</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.nationalgeographic.com/">National Geographic 国家地理</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://fortune.com/">Fortune 财富杂志</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://people.com/">People 人物周刊</a> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="col-6 col-md"> | |||||
| <h5>Others</h5> | |||||
| <ul class="list-unstyled text-small"> | |||||
| <li> | |||||
| <a class="text-muted" href="https://twitter.com/rebelpepperwang?lang=en">反抗辣椒</a> | |||||
| </li> | |||||
| <li> | |||||
| <a class="text-muted" href="https://www.spiegel.de/">明镜周刊 - 德语</a> | |||||
| </li> | |||||
| <li> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| </div> | |||||
| </footer> | |||||
| <!-- Bootstrap core JavaScript | |||||
| ================================================== --> | |||||
| <!-- Placed at the end of the document so the pages load faster --> | |||||
| <script src="assets/js/jquery.min.js"></script> | |||||
| <script src="assets/js/popper.js"></script> | |||||
| <script src="bootstrap/js/bootstrap.min.js"></script> | |||||
| </body> | |||||
| </html> |