new OpenQA.Selenium.IE.InternetExplorerDriver(
new OpenQA.Selenium.IE.InternetExplorerOptions {
IntroduceInstabilityByIgnoringProtectedModeSettings = true,
EnableNativeEvents = false
}
)
class MyDataSource : DataSource {
unsafe protected override void OnRequest(DataSourceRequest request) {
string url = request.Path.Split('#')[0];
string name = Path.GetFileName(url);
string ext = Path.GetExtension(url);
byte[] bytes = ResourceByteArray(name);
if (bytes == null) {
System.Windows.Forms.MessageBox.Show("File Not Found: " + url);
bytes = new byte[] { };
}
DataSourceResponse resp=new DataSourceResponse();
fixed (byte* p = bytes) {
IntPtr ptr = (IntPtr)p;
resp.Buffer=ptr;
resp.MimeType=GetMimeType(ext);
resp.Size=Convert.ToUInt32(bytes.Length);
SendResponse(request, resp);
}
}
}
void Form1_Shown(object sender, EventArgs e) {
webControl1.WebSession.AddDataSource("sss", new MyDataSource());
webControl1.Source = new Uri("asset://sss/index.html");
}
class ResourceInterceptor : IResourceInterceptor {
public bool OnFilterNavigation(NavigationRequest request) {
throw new NotImplementedException();
}
unsafe public ResourceResponse OnRequest(ResourceRequest request) {
string url = request.Url.OriginalString;
string name = Path.GetFileName(url);
string ext = Path.GetExtension(url);
byte[] bytes = ResourceByteArray(name);
if (bytes == null) {
System.Windows.Forms.MessageBox.Show("File Not Found: " + url);
bytes = new byte[] { };
}
fixed (byte* p = bytes) {
IntPtr ptr = (IntPtr)p;
return ResourceResponse.Create(Convert.ToUInt32(bytes.Length), ptr, GetMimeType(ext));
}
}
}
void Form1_Shown(object sender, EventArgs e) {
WebCore.ResourceInterceptor = new ResourceInterceptor();
webControl1.Source = new Uri("asset://sss/index.html");
}
function С(){
this.a = 100;
// this - это новый объект, который будет присвоен переменной o.
// т.е. свойство "a" - это свойство создаваемого объекта
}
С.prototype.b = 200;
//С - формально это функция, логически у нас - это класс. Любая функция имеет прототип, с помощью которого мы можем добавлять свойства и методы для класса
//т.е. свойство "b" - это свойство прототипа, которое наследуется при создании объекта класса
var o = new C();
var CThis;
function C(){
alert(this.b); // 200 (b - уже есть, т.к. это свойство прописано в прототипе)
this.a = 100;
CThis=this; // сохраним для исследований
}
C.prototype.b = 200; // дополняем в класс новое свойство
var o = new C();
alert(CThis == o); //true
alert(o.prototype); //undefined (у объекта нет прототипа)
alert(o.constructor==C); //true (у объекта есть конструктор)
alert(o.constructor.prototype==C.prototype); //true
{
var plusArr={},questArr={};
$('#comments > div.comment_item').each(function(i,el){
el=$(el);
var r=el.children('div.reply_comments'),
rb=el.children('div.reply'),
m=el.children('div.message'),
info=el.children('div.info'),
qs=r.children('div.comment_item'),
show=$('<a>Вопросы</a>').insertAfter(m),
user=$('a.username',info).text(),
score=parseInt($('span.score',info).text());
el.css('border','1px solid green');
r.hide();
rb.hide();
show.toggle(function(){
r.show();rb.show();
},function(){
r.hide();rb.hide();
});
$('a.reply',rb).text('Спросить');
qs.each(function(i,el){
el=$(el);
var r=el.children('div.reply_comments'),
rb=el.children('div.reply'),
m=el.children('div.message'),
info=el.children('div.info'),
user=$('a.username',info).text(),
show=$('<a>Ответы</a>').insertAfter(m),
localscore=0;
el.css('border','1px solid blue');
r.hide();
rb.hide();
show.toggle(function(){
r.show();rb.show();
},function(){
r.hide();rb.hide();
});
$('div.info:has(a.username:[text="'+user+'"]) span.score',r).each(function(i,el){
localscore+=parseInt($(el).text());
});
score+=localscore;
show.text('Ответы ('+r.children('div.comment_item').length+')');
var stat='';
stat+='<span> За ответы:'+((localscore>0)?'+':'')+localscore+'</span>';
$(stat).appendTo(info);
if(!questArr[user]) questArr[user]=1;
else questArr[user]++;
});
show.text('Вопросы ('+qs.length+')');
var stat='';
stat+='<span> За ответы:'+((score>0)?'+':'')+score+'</span>';
$(stat).appendTo(info);
});
var getTop =function(obj,n){
var a=[];
for(var i in obj)
a.push({n:i,v:obj[i]});
a.sort(function(a,b){return b.v-a.v;});
return a.slice(0,n);
}
var makeTopHtml=function(a){
for(var i=0,n=a.length;i<n;i++){
var o=a[i];
a[i]=o.n+': '+o.v;
}
return a.join(', ');
}
$('#comments div.info').each(function(i,el){
var info=$(el),
score=parseInt($('span.score',info).text());
if(score!=0){
var user=$('a.username',info).text();
if(!plusArr[user]) plusArr[user]=0;
plusArr[user]+=score;
}
});
var stat='';
stat+='<div> Топ Плюсов:'+makeTopHtml(getTop(plusArr,10))+'</div>';
stat+='<div> Топ Вопросов:'+makeTopHtml(getTop(questArr,10))+'</div>';
$(stat).insertBefore($('#comments'));
}